Celery如何处理链中的任务失败?

时间:2015-03-01 21:22:16

标签: python django celery django-celery celery-task

当链中的Celery任务失败时会发生什么?

如果失败的任务成功重试,它是否只是从链中的位置恢复?

例如:

my_chain = (task1.s() | task2.s() | task3.s())
my_chain.apply_async((**params))

如果task2失败并成功重试,那么task3会被执行吗?

有一个旧问题涉及主题(Retrying celery failed tasks that are part of a chain),而Github issuecommit适用于Celery版本3.0.4,Task.retry转发链接链接以解决此问题。但是,在这种情况下,我无法找到任何解释Celery行为的具体文档。

当然,在Celery文档中没有提及它重试部分(http://celery.readthedocs.org/en/latest/userguide/tasks.html#retryinghttp://celery.readthedocs.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.retry

1 个答案:

答案 0 :(得分:2)

我认为以下代码段最接近于描述它。

"当您调用retry时,它将使用相同的task-id发送新消息,并且会确保将消息传递到与原始任务相同的队列。

当重试任务时,这也被记录为任务状态,以便您可以使用结果实例跟踪任务的进度(参见状态)。"

我相信在哪里声明跟踪任务状态最能描述您正在寻找的内容。

我也基于第一手经验了解这一点