Отмена цепочки задач сельдерея?
Я обнаружил, что сельдерей поддерживает цепочки задач: http://celery.readthedocs.org/en/latest/userguide/canvas.html.
Вопрос: как я могу остановить выполнение цепочки в задаче?
Например, мы получили цепочку из N предметов (N > 2). И во втором задании мы понимаем, что нам не нужно выполнять все остальные задания. Что делать?
1 ответ
Решение
В более новых версиях сельдерея (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)