Лимит на питон сельдере эта?
Есть ли у сельдерея ограничение на выполнение задания? Я хочу выполнить метод foo
через 12 дней у сельдерея будут проблемы с этим? Или мне нужно настроить какие-либо настройки Celery для такого длинного эта?
next_run = datetime.now() + timedelta(days = 12)
foo.apply_async(args=[], eta = next_run)
1 ответ
Это зависит от того, какого брокера вы используете, и от нескольких конфигураций, таких как visibility_timeout
,
Когда задача с установленным ETA ставится в очередь, она выбирается работником как можно скорее, а не в ETA. Рабочий держит задание до ETA и затем выполняет его. Рабочий подтверждает брокеру, когда он выполняет задачу; поэтому брокер знает, когда сообщение задачи может быть безопасно удалено.
Некоторые брокеры, такие как Redis и SQS, считают задачу потерянной, если она некоторое время не подтверждается работником, которая называется visibility_timeout
, В таком случае это позволяет другому работнику принять сообщение задачи.
Вернемся к вашему случаю, если вы используете Redis, который имеет значение по умолчанию visibility_timeout
из 1 часа, задержка задачи 12 дней может закончить выполнение задачи несколько раз, например 12 * 24 раза, в зависимости от вашего числа работников.
Может быть заманчиво увеличить visibility_timeout
до более чем 12 дней. Имейте в виду, что он эффективно отключает механизм подтверждения, который существует по уважительной причине.
Я предлагаю вам использовать задачу cron, которая выполняется с интервалом visibility_timeout
, для поиска задач, которые должны быть вскоре выполнены, и ставить их в очередь в их фактическое ETA.
Refs: