如果其中一项任务失败,整条链断裂,Celery链的重点是什么?!!
我有这个芹菜链:
res = chain(workme.s ( y=1111 ), workme2.s( 2222 ), workme3.s( 3333 ),)()
我让workme2失败并重试:
@celery.task(default_retry_delay=5, max_retries = 10, queue="sure")
def workme2(x,y):
# try:
try:
print str(y)
sleep(2)
print str(x)
## adding any condition that makes the task fail
if x!=None:
raise Exception('Aproblem from your workme task')
print 'This is my username: ' + str(x['user']) + \
' And Password: ' + str(x['pas'])
return "22xx"
except Exception, exc:
workme2.retry(args=[x,y], exc=exc,)
答案 0 :(得分:9)
那就是重点。
形成一个链意味着你的子任务具有某种序列依赖性:每个子任务只有在执行了前一个时才有意义。 如果没有这个,你只需使用排队或使用组而不是链。
因此,如果一个子任务失败(并且在尝试所有重试后仍然失败),则链失败。
我欣然承认the documentation(截至Celery 3.1.18)在这方面远非明确,但名称暗示了这种语义: "一条链只有最薄弱的环节那么强大。"