当链中的 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 issue和 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 发送一条新消息,并且它会注意确保该消息被传递到与原始任务相同的队列。
当重试任务时,这也会记录为任务状态,以便您可以使用结果实例跟踪任务的进度(请参阅状态)。”
我相信其中声明跟踪任务状态的内容最能描述您正在寻找的内容。
我也根据第一手经验知道这一点
关于python - Celery 如何处理链内的任务失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799261/