2015-12-16 4 views
0

Имеет ли сельдерей лимит на эта для задачи? Я хочу выполнить метод foo через 12 дней, будет ли у Сельдерей проблема с этим? Или мне нужно настроить любые настройки сельдерея для такой длинной eta?Ограничение на Python Celery eta?

next_run = datetime.now() + timedelta(days = 12) 
foo.apply_async(args=[], eta = next_run) 
+0

Вы пробовали ??? Ну ладно, вам придется быть терпеливым

+0

попробуйте в vm - тогда вы можете возиться с системным временем, не разбирая вещи – scytale

+0

@brunodesthuilliers: Да, попробовали .. Думаю, я узнаю через 12 дней .. – ofey

ответ

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: