Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Celery task chain cancelling?

I found that celery supports task chains: http://celery.readthedocs.org/en/latest/userguide/canvas.html#chains.

Question is: how can I stop chain's execution in a task?

For example, we got a chain of N items (N > 2). And in the second task we realize that we do not need all the rest tasks to be executed. What to do?

like image 424
Nikita Hismatov Avatar asked Oct 07 '12 20:10

Nikita Hismatov


1 Answers

In newer versions of celery (3.1.6) you can revoke an entire chain by simply walking the chain and revoking each item in turn.

# 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)
like image 154
Andrew Walker Avatar answered Oct 09 '22 09:10

Andrew Walker