2017-01-23 8 views
0

私はセロリーv3.xを少し前から使用していました。正式にリリースされて以来、v4への移行について考えました。今、私はPyPIを通して利用可能なv4.0.2を使用しています。そこの両方のバージョンでは、いくつかのミスマッチがあったが、私を混乱させる一つがこれです:redisバックエンドを使ったCelery v4グループのタスクの動作

ここ

は、自分のタスクファイルです:

from celery import group, chord 
from worker import app 


@app.task(name='task') 
def task(i): 
    return i 


@app.task(name='remaining') 
def dummy(result): 
    print result 

@app.task(name='mainTask') 
def mainTask(): 
    groupTask = group([task.s(i) for i in range(0,10)]) 
    job = chord(groupTask, dummy.s())() 
    return job 

私はmainTaskを呼び出すと、その後のグループタスクが実行されますけど、この作業の結果をdummyで印刷しようとすると、結果の順序が乱れてしまいます。サンプル出力は次のようになります。

[0, 1, 2, 3, 4, 8, 6, 9, 7, 5] 

これは、結果のバックエンドが赤色である場合にのみ発生します。 amqpを使用すると、結果は次のような正確な順番で表示されます。

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

P.S.この動作は以前のバージョンのセロリにはありませんでした。 Redisとamqpは結果を正しい順序で返しました。私が行方不明のものはありますか?

答えて

1

同じ問題に直面している可能性のある他の人にこの回答を投稿してください。

セレスのredisバックエンドコードは、結果が完了すると直ちにredisリストにプッシュされ、したがって順序が変更されるように書き込まれます。

セロリのgithubの問題ページに同じクエリを投稿し、寄稿者の1人からanswerを取得しました。

関連する問題