Лимит на питон сельдере эта?

Есть ли у сельдерея ограничение на выполнение задания? Я хочу выполнить метод 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:

Другие вопросы по тегам