我在 Celery
上使用 Django
和 Redis
。
我的一些任务很长,大约需要 1 hour
。我知道这是次优的,最好我应该使用较短的任务,但这就是我得到的......
有时任务/工作器会崩溃。这可能由于各种不重要的原因而发生。也许这个worker崩溃了,网络问题,抢占时的spot-instance,被OOM杀死,或者其他任何我无法“捕捉”和处理的意外原因。
我想确保尽快再次尝试该任务。
我可以使用ack_late
,但是问题是这个任务有很长的超时时间(大约90分钟),这意味着如果任务开始并且worker在2分钟后崩溃,我现在会等待再过 88 分钟,任务将返回队列并在另一个工作线程上再次开始执行。
我想知道是否存在另一种解决方案,该解决方案将使工作人员“消失”并将任务放回队列中?