私はセロリー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は結果を正しい順序で返しました。私が行方不明のものはありますか?