当链中的Celery任务失败时会发生什么?
当失败的任务重试成功时,它是否只是从链中的位置恢复?
例如:
my_chain = (task1.s() | task2.s() | task3.s())
my_chain.apply_async((**params))
如果task2
失败并且重试成功,那么会执行task3
吗?
有一个老问题涉及这个主题(重试作为链一部分的芹菜失败任务),还有一个应用于celery 3.0.4版本的Github问题和提交,它使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发送一条新消息,并会注意确保消息与始发任务发送到相同的队列。
重试任务时,这也会记录为任务状态,以便您可以使用结果实例跟踪任务的进度(请参阅状态)。"
我相信,跟踪任务状态的状态最能描述您正在寻找的内容。
我也知道这是基于第一手经验