Я читал документ и искал, но, похоже, не нашел прямого ответа:
Можете ли вы отменить уже выполняющуюся задачу? (так как задача запущена, занимает некоторое время, и ее нужно отменить на полпути)
Я нашел это из документа в FAQ по сельдерею
>>> result = add.apply_async(args=[2, 2], countdown=120)
>>> result.revoke()
Но мне неясно, отменит ли это задачи в очереди или убьет запущенный процесс на рабочем месте. Спасибо за свет, который вы пролили!
источник
В Celery 3.1 изменен API отзыва задач .
Согласно FAQ по сельдерею , вы должны использовать result.revoke:
>>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke()
или если у вас есть только идентификатор задачи:
>>> from proj.celery import app >>> app.control.revoke(task_id)
источник
@ 0x00mh ответ правильный, однако недавние документы о сельдерее говорят, что использование этой
terminate
опции является « крайней мерой для администраторов », потому что вы можете случайно прервать другую задачу, которая начала выполняться в это время. Возможно, лучшее решение - объединениеterminate=True
сsignal='SIGUSR1'
(что вызывает исключение SoftTimeLimitExceeded в задаче).источник
SoftTimeLimitExceeded
возникает в моей задаче, вызывается моя настраиваемая логика очистки (реализованная черезtry
/except
/finally
). На мой взгляд, это намного лучше, чем то, чтоAbortableTask
предлагает ( docs.celeryproject.org/en/latest/reference/… ). В последнем случае вам понадобится серверная часть результатов базы данных, и вам придется вручную и неоднократно проверять статус текущей задачи, чтобы увидеть, не было ли она прервана.worker_prefetch_multiplier = 1
поскольку у меня всего несколько длительных задач, с завершением должно быть все в порядке - поскольку никакие другие задачи не будут выполнены путем завершения - правильно ли я понял? @spicyramenСмотрите следующие параметры для задач: time_limit , soft_time_limit (или вы можете установить его для воркеров ). Если вы хотите , чтобы контролировать не только время выполнения, то см истекает аргумент apply_async метода.
источник
Кроме того, неудовлетворительно, есть еще один способ (прервать выполнение задачи), чтобы остановить задачу, но есть много ненадежных, подробнее см. Http://docs.celeryproject.org/en/latest/reference/celery.contrib.abortable .html
источник