Отмена цепочки задач сельдерея?

Я обнаружил, что сельдерей поддерживает цепочки задач: 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)
Другие вопросы по тегам