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

How does Celery handle task failures within a chain?

当链中的 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), and a Github issue and commit适用于Celery 3.0.4版本,使得Task.retry转发链链接来解决这个问题。但是,我无法找到解释 Celery 在这种情况下的行为的任何具体文档。

当然,在 Celery 文档重试部分 (http://celery.readthedocs.org/en/latest/userguide/tasks.html#retrying, http://celery.readthedocs.org/en/latest/reference/celery.app.task.html#celery.app.task.Task.retry)

中没有提及它

我相信以下片段最接近于描述这一点。

“当您调用重试时,它会使用相同的任务 ID 发送一条新消息,并且会注意确保将消息传送到与原始任务相同的队列。

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

我认为跟踪任务状态最符合您的要求。

我也是亲身经历过的