セロリがタスク チェーンをサポートしていることがわかりました: http://celery.readthedocs.org/en/latest/userguide/canvas.html#chains。
質問:タスクでチェーンの実行を停止するにはどうすればよいですか?
たとえば、N 個のアイテム (N > 2) のチェーンを取得したとします。2 番目のタスクでは、残りのすべてのタスクを実行する必要がないことがわかります。何をすべきか?
セロリがタスク チェーンをサポートしていることがわかりました: http://celery.readthedocs.org/en/latest/userguide/canvas.html#chains。
質問:タスクでチェーンの実行を停止するにはどうすればよいですか?
たとえば、N 個のアイテム (N > 2) のチェーンを取得したとします。2 番目のタスクでは、残りのすべてのタスクを実行する必要がないことがわかります。何をすべきか?
セロリの新しいバージョン (3.1.6) では、チェーンをたどって各アイテムを順番に取り消すだけで、チェーン全体を取り消すことができます。
# Build a chain for results
from tasks import addd
from celery import chain
def revoke_chain(result):
while result:
result.revoke()
result = result.parent
# independent tasks (with immutable signatures)
c = chain(*tuple(add.si(i,i) for i in xrange(50)))
h = c()
# some time later ...
revoke_chain(h)
# dependant task
c = add.s(1,1) | add.s(2) | add.s(3)
h = c()
# some time later ...
revoke_chain(h)