Джанго + Сельдерей с долгосрочными запланированными задачами - PullRequest
1 голос
/ 01 апреля 2019

Я разрабатываю приложение Django, которое в значительной степени опирается на планирование задач Celery, используя Redis в качестве бэкэнда.Задачи могут быть запущены в течение большого периода времени, а также в течение нескольких секунд / минут.

Я читал о тайм-ауте видимости Redis и последствиях планирования задач с тайм-аутом, превышающим тайм-аут видимости (я также нахожусь в процессе работы с ним в предыдущем проекте), поэтому мне интересно, есть ливсе, что лучше моего решения, а именно: запустить еще одну «вспомогательную» задачу за 5 минут до того, как нужно будет выполнить «основную», запланировав «основную» задачу для запуска в нужное время, сохранив идентификатор задачи в БД, а затем проверивв «основной» задаче, если идентификатор хранимой задачи является тем, который выполняется.Последняя часть (с сохранением идентификатора задачи) требуется, так как несколько запусков «вспомогательной» задачи могут порождать множество «главных» экземпляров задачи, но при таком подходе у каждого будет свой идентификатор задачи.

Мне очень не нравится, как звучит этот подход и как он работает, так как если задача запланирована на месяц с текущего времени, задачи «помощник» и «основной» выполняются до сотни раз.

Я также знаю, что это открытый вопрос, поэтому мне интересен более аккуратный обходной путь, чем само решение.

1 Ответ

0 голосов
/ 07 апреля 2019

Протестировав доступные варианты, по моему мнению, только использование RabbitMQ в качестве брокера решает всю проблему.

Хотя это приемлемый вариант для меня, отсутствие некоторых из redis параметров конфигурации (например, размер пула) делает его непригодным для тех, кто использует услуги хостинга с некоторым ограничением на открытое соединение с брокером.

...