2013-06-25 26 views
5

Jaki jest sens łańcucha selera, jeśli cały łańcuch pęknie, jeśli jedno z zadań się nie powiedzie? !!Łańcuch selera pęka, jeśli jedno z zadań się nie powiedzie

mam ten łańcuch Seler:

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

I zrobiłem workme2 nie powiedzie się z prób, takich jak ten:

@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-of-a-chain –

+0

@BernhardVallant, Witam, pobrałem najnowsze kilka dni temu, Czy to oznacza, że ​​ta łata nie jest dołączona? – securecurve

+0

Jeśli jest nowsza od wersji 3.0.4, to chyba powinna być dołączona ... –

Odpowiedz

4

To o to chodzi.

Tworzenie łańcucha oznacza, że ​​podzadania mają pewną zależność szeregową: każda ma sens tylko wtedy, gdy poprzednia została wykonana. Bez tego po prostu używałbyś kolejkowania lub używałeś grupy zamiast łańcucha.

Jeśli jedno podzadanie nie powiedzie się (i nadal kończy się niepowodzeniem po próbie wszystkich jego ponownych prób), łańcuch zawodzi.

ja łatwo przyznać, że the documentation (jak selera 3.1.18) jest daleki od wyraźnego w tym względzie, ale sama nazwa wskazuje to semantyka „Łańcuch jest tak mocny, jak jego najsłabsze ogniwo”

+0

Dobrze trafiłeś :) .. i zgadzam się z tobą, że w dokumentacji są pewne niewyraźne punkty – securecurve