2013-06-25 10 views
5

タスクの1つが失敗した場合、チェーン全体が壊れた場合、セロリチェーンのポイントは何ですか?タスクの1つが失敗した場合、セロリチェーンが破損します

私は、このセロリのチェーンがあります。

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

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

+0

@BernhardVallant、こんにちは、私は数日前に最新のものをダウンロードしました。このパッチは含まれていませんか? – securecurve

+0

もしそれが3.0.4より新しいなら私はそれが含まれるべきだと思います... –

答えて

4

がポイントであること。

チェーンの作成とは、サブタスクが何らかのシリアル依存関係を持っていることを意味します。以前のものが実行された場合のみ、それぞれが意味を持ちます。 これがなければ、単にキューイングを使用するか、チェーンではなくグループを使用するだけです。

したがって、1つのサブタスクに障害が発生しても(その再試行をすべて試行した後でも失敗した場合)、チェーンは失敗します。

私は容易に(セロリ3.1.18のような)the documentationはこの点ではるかに明示からですが、名前がこの意味を示唆していることを認める: 「チェーンはその最も弱いリンクと同じくらい強いです。」

+0

からダウンロードリンクを送ってください。良い点:) ..そして、私はあなたに同意します。 – securecurve