Задать вопрос
sortarage
@sortarage
Я тучка-тучка-тучка, я вовсе не медведь

Какой самый простой способ передавать сигналы в Python-скрипты для асинхронного выполнения задач?

Доброй ночи :)

Учу Python (3), базовый уровень, но возникла необходимость настроить связь между скриптами, завяз.

Примерная задача:
  • Скрипт 1 выполняет задачи в for цикле. По некоторым задачам ему нужна дополнительная обработка внешним скриптом, он дает Скрипту 2 сигнал (мол, сделай-то то), и не дожидаясь выполнения задачи идет на следующую итерацию цикла.
  • Скрипт 2 не должен ничего возвращать Скрипту 1, результат его работы пишется сразу в базу, но к нему может поступить одновременно несколько запросов с нескольких работающих версий Скрипта 1.

Идеальное решение: в моей голове висит вариант, когда Скрипт 2 висит запущенным, получает запросы от Скрипта 1 в любом количестве, и под каждый запрос создает отдельный асинхронный процесс, результат которого записывает в базу.

Как я пытаюсь решить это сейчас:
  • Записываю промежуточные варианты выдачи Скрипта 1 в базу, потом раз в секунду проверяю базу на предмет наличия промежуточных вариантов, и допиливаю их Скриптом 2. Не гибко + могу обрабатывать только один промежуточный вариант за раз.
  • Пробовал сделать через микросервисы на Flask, то есть поднял Скрипт 2 как сервер, Скрипт 1 передает ему GET запросы, получает True и идет по циклу дальше. Но абсолютно не решило проблему, ибо все равно получается обработка одного запроса за раз, а надо чтобы если поступило 100 запросов, то 100 раз началась обработка.


В общем, буду благодарен любому совету на тему с минимальным расжевыванием.
  • Вопрос задан
  • 603 просмотра
Подписаться 1 Средний 1 комментарий
Решения вопроса 2
@skozlovf
Самый простой, наверное, multiprocessing и Queue.
https://docs.python.org/3.6/library/multiprocessin...
Ответ написан
Astrohas
@Astrohas
Python/Django Developer
можно банальным subprocess.Popen обойтись :
import subprocess

subprocess.Popen('python script2.py')
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы