Celery - 自动重试在崩溃的 worker 上运行的长时间运行的任务

时间:2021-05-01 08:31:59

标签: redis celery django-celery

我在 Celery 上使用 DjangoRedis

我的一些任务很长,大约需要 1 hour。我知道这是次优的,最好我应该使用较短的任务,但这就是我得到的......

有时任务/工作器会崩溃。这可能由于各种不重要的原因而发生。也许这个worker崩溃了,网络问题,抢占时的spot-instance,被OOM杀死,或者其他任何我无法“捕捉”和处理的意外原因。

我想确保尽快再次尝试该任务。

我可以使用ack_late,但是问题是这个任务有很长的超时时间(大约90分钟),这意味着如果任务开始并且worker在2分钟后崩溃,我现在会等待再过 88 分钟,任务将返回队列并在另一个工作线程上再次开始执行。

我想知道是否存在另一种解决方案,该解决方案将使工作人员“消失”并将任务放回队列中?

1 个答案:

答案 0 :(得分:0)

你可以试试 task_reject_on_worker_lost...这是一个棘手的问题,但看看...