Celeryのドキュメントは、タスクに他のタスクの結果を待たせるのは悪い考えだと示唆しています…しかし、提案された解決策(「良い」見出しを参照)には、何かが望まれます。具体的には、サブタスクの結果を呼び出し元に戻す明確な方法はありません(また、それは一種の醜いです)。
それで、ジョブを「連鎖」させる方法はありますか?それで、発信者は最終的なジョブの結果を取得しますか?たとえば、例を使用するにはadd
:
>>> add3 = add.subtask(args=(3, ))
>>> add.delay(1, 2, callback=add3).get()
6
または、Resultのインスタンスを返しても大丈夫ですか?例えば:
@task
def add(x, y, callback=None):
result = x + y
if callback:
return subtask(callback).delay(result)
return result
これにより、チェーン内の「最終的な」ジョブの結果を簡単に取得できます。
result = add(1, 2, callback=add3).delay()
while isinstance(result, Result):
result = result.get()
print "result:", result