Я вижу два вопроса:
Как запустить задачу сельдерея, когда django закончил запуск
См. Пункт 2 ниже, но прежде, см. 0 и 1.
Выполнить задачу, которая должна выполняться в течение всего цикла запуска приложения.
Как не существует прецедент, я вижу три интерпретации:
-0. Как запустить сельдерей вместе с runserver
или uwsgi, gunicorn, mod_wsgi и т. Д.
Вам нужно запускать разные команды для разных процессов, одну для процесса веб-сервера, другую для работников сельдерея, способ связи друг с другом через брокера, когда брокер один и тот же, django отправляет ему задачу и тянет к сельдерею, для управления процессами используется менеджер процессов, такой как supervisord, и тот же брокер, который заставляет их говорить.
- Как обеспечить доступность сельдерея для запуска задачи во время цикла запроса / ответа django.
После того, как вы запустите задачу сельдерея с супервизором, и вам потребуется запускать задачу при каждом запросе / ответе, используйте Сигналы запроса / ответа , чтобы вызвать функцию с соответствующим декоратором сельдерея @task
.
- Как сохранить задачу celery во время основного процесса python, который обслуживает запрос / ответ, активным, другими словами, так как демон python начинается, пока не закончится, как, например, до тех пор, пока
python manage.py runserver
не будет запущен, пока python manage.py runserver
прекращено. (это отличается от пункта № 1, поскольку один python manage.py runserver
отвечает за обслуживание N запроса / ответа).
Для меня это звучит как длинный пул, и давайте предположим, что вы хотите измерить, как долго приложение работало, потому что вы можете считать секунды с момента его запуска до его окончания, обычно эти случаи обрабатываются с помощью других стратегий, таких как анализ Журналы приложений, но в любом случае, если это так, у вас все время будет занят занятый сельдерей. Обычно это возможный неправильный шаблон, но случай использования - это случай использования, поэтому точкой входа в веб-приложение является файл wsgi, а точкой выхода - системный сигнал SIGINT
, прочитайте этот вопрос .
Мое намерение не путать, это указать, что этот вопрос можно интерпретировать по-разному, в любом случае, у каждого есть ответ.