10

タスクの 1 つが失敗した場合、チェーン全体が壊れる場合、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,)
4

1 に答える 1

19

それがポイントです。

チェーンを形成するということは、サブタスクにある種のシリアル依存関係があることを意味します。それぞれのサブタスクは、前のサブタスクが実行された場合にのみ意味があります。これがなければ、単にキューイングを使用するか、チェーンではなくグループを使用することになります。

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

ドキュメント(Celery 3.1.18 の時点) がこの点で明確ではないことはすぐに認めますが、名前はこのセマンティクスを示唆しています。

于 2015-09-11T08:44:39.330 に答える