2013-06-25 2 views
5

Qual è il punto della catena di sedili se l'intera catena si rompe se uno dei compiti fallisce? !!La catena di sedimenti si interrompe se una delle attività fallisce

ho questa catena Sedano:

res = chain(workme.s (y=1111), workme2.s(2222), workme3.s(3333),)() 

e ho fatto workme2 fallisce con tentativi come questo:

@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

http://stackoverflow.com/questions/11508112/retrying-celery-failed-tasks-that-are-part-ofa-a-chain –

+0

@BernhardVallant, Ciao, ho scaricato l'ultimo un paio di giorni fa, questo significa che questa patch non è inclusa ?? – securecurve

+0

Se è più recente della 3.0.4 suppongo che dovrebbe essere incluso ... –

risposta

4

Questo è il punto.

Formare una catena mezzi tue attività secondarie hanno un qualche tipo di dipendenza seriale: Ciascuno senso solo se il precedente è stato eseguito. Senza questo, si dovrebbe semplicemente usare la coda o usare un gruppo piuttosto che una catena.

Quindi, se uno sottoattività fallisce (e ancora non riesce dopo aver tentato tutte le sue tentativi), la catena fallisce.

ho difficoltà ad ammettere che the documentation (come di sedano 3.1.18) è tutt'altro che esplicita in questo senso, ma il nome suggerisce questa semantica: "Una catena è forte quanto il suo anello più debole."

+0

. Buon punto :) .. e sono d'accordo con te che ci sono alcuni punti sfocati nella documentazione – securecurve