2017-02-02 2 views
0

Ich habe ein 3 Sellerie Aufgaben wie folgt aus:Wie man Sellerie Aufgabenrückrufe stoppt?

@app.task 
def main_func(): 
    if this: 
     func1.delay() 
    else: 
     func2.delay() 

@app.task 
def func1(): 
    ... do something ... 

@app.task 
def func2(): 
    ... do something ... 

Funktion main_func alle 30 Sekunden auszuführen geplant ist. Wenn eine Bedingung erfüllt ist, wird eine Sellerie-Aufgabe von func1 aufgerufen. Andernfalls wird eine Aufgabe für func2 erstellt.

Jetzt, wenn ich den Sellerie Arbeiter ausführen und die Funktion main_func ausgeführt wird, dann ruft es sich erneut mit func1 oder func2 in Schleifenbildung.

Jetzt im Protokoll sollten die Tasks einen Zeitunterschied von 30 Sekunden zwischen aufeinanderfolgenden Ausführungen haben, aber wegen der Schleife laufen sie nacheinander weiter.

Wie kann ich diese Situation verhindern?

Anmerkung: Ich bin mit Sellerie 4.0.2

Antwort

0

Verwenden `celery.current_app.send_task ('mymodel.tasks.mytask', args = [arg1, arg2, arg3])

wo CURRENT_APP ist Eigenschaft des Sellerie-Moduls. mymodel.tasks ist ein Pfad zu Ihrem tasks.py