2012-10-07 4 views
9

Ich fand, dass Sellerie Task-Chains unterstützt: http://celery.readthedocs.org/en/latest/userguide/canvas.html#chains.Sellerie Task Chain Cancelling?

Frage ist: Wie kann ich Kettenausführung in einer Aufgabe stoppen?

Zum Beispiel haben wir eine Kette von N Elementen (N> 2). Und in der zweiten Aufgabe erkennen wir, dass wir nicht alle übrigen Aufgaben ausführen müssen. Was ist zu tun?

+1

Wie wäre es mit dem Auslösen einer Ausnahme in der Aufgabe, wenn Sie es stoppen möchten? – RickyA

+0

hört sich gut an :) Ich werde versuchen, –

+1

Hat es funktioniert? ... – RickyA

Antwort

4

In neueren Versionen von Sellerie (3.1.6) können Sie eine ganze Kette widerrufen, indem Sie einfach die Kette durchlaufen und jedes Element nacheinander entziehen.

# 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)