【问题标题】:Celery - automatic retrying of long running tasks running on crashed workerCelery - 自动重试在崩溃的工作人员上运行的长时间运行的任务
【发布时间】:2021-05-01 08:31:59
【问题描述】:

我在 Redis 上使用 CeleryDjango

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

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

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

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

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

【问题讨论】:

  • 你是如何设置超时的?如果任务停止,它应该等待 88 分钟是没有意义的..

标签: redis celery django-celery


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 2011-07-24
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多