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 发送一条新消息,并且会注意确保将消息传送到与原始任务相同的队列。
重试任务时,这也会记录为任务状态,以便您可以使用结果实例跟踪任务的进度(请参阅状态)。
我认为跟踪任务状态最符合您的要求。
我也是亲身经历过的
当链中的 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 发送一条新消息,并且会注意确保将消息传送到与原始任务相同的队列。
重试任务时,这也会记录为任务状态,以便您可以使用结果实例跟踪任务的进度(请参阅状态)。
我认为跟踪任务状态最符合您的要求。
我也是亲身经历过的