2012-10-22 16 views
10

Ich habe ein kleines Skript, das Aufgaben für die Verarbeitung einreiht. Dieses Skript erstellt eine ganze Reihe von Datenbankabfragen, um die Elemente abzurufen, die in die Warteschlange gestellt werden sollen. Das Problem, mit dem ich konfrontiert bin, ist, dass die Selleriearbeiter die Aufgaben aufnehmen, sobald sie vom Skript in die Warteschlange gestellt werden. Das ist richtig, und so soll Sellerie funktionieren, aber das führt oft zu Deadlocks zwischen meinem Drehbuch und den Selleriearbeitern.Wie kann ich die Ausführung von Sellerie-Aufgaben verschieben?

Gibt es eine Möglichkeit, alle meine Aufgaben aus dem Skript in die Warteschlange zu stellen, aber die Ausführung zu verzögern, bis das Skript abgeschlossen ist oder bis zu einer festen Zeitverzögerung?

Ich konnte dies in der Dokumentation von Sellerie oder Django-Sellerie nicht finden. Ist das möglich?

Momentan habe ich daran gedacht, alle zu verarbeitenden Objekte in eine Liste aufzunehmen. Wenn mein Skript alle Abfragen ausgeführt hat, kann ich einfach die Liste durchlaufen und die Aufgaben in die Warteschlange stellen. Vielleicht würde dies das Problem lösen, aber wenn Sie Tausende von Elementen in der Warteschlange haben, könnte dies eine schlechte Idee sein.

Antwort

1

Ich glaube, Sie versuchen, Rennen Zustand Ihrer eigenen Skripts zu vermeiden, nicht für ein Verfahren bitten, eine Task-Ausführung zu verzögern.

Dann können Sie eine Aufgabe erstellen und in dieser Aufgabe jede Ihrer Aufgaben mit .apply(), nicht .apply_async() oder .delay() aufrufen. Damit diese Aufgaben nacheinander ausgeführt werden, geben Sie

ein
Verwandte Themen