Wie überprüft man den Aufgabenstatus in Sellerie?
Wie wird man prüfen, ob eine Aufgabe ausgeführt wird, in der Sellerie (genauer gesagt, ich bin mit Sellerie-django)?
Ich habe die Dokumentation gelesen, und ich habe gegoogelt, aber ich kann nicht sehen, ein Anruf wie:
my_example_task.state() == RUNNING
Mein use-case ist, ich habe eine externe (java -) service für die Transkodierung. Wenn ich senden Sie ein Dokument zur Umschlüsselung, ich möchte, um zu überprüfen, ob der task, der ausgeführt wird, dass der Dienst ausgeführt wird, und wenn nicht, zu (re)starten.
Bin ich mit der aktuellen stable-Versionen - 2.4, glaube ich.
InformationsquelleAutor der Frage Marcin | 2012-01-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Rückkehr der task_id (die gegeben ist aus .delay()) und bitten Sie den Sellerie Instanz danach über den Staat:
Wenn Sie Fragen, bekommen eine neue AsyncResult mit dieser task_id:
InformationsquelleAutor der Antwort Gregor
Jeder
Task
Objekt hat einen.request
Eigenschaft, die es enthältAsyncRequest
Objekt. Entsprechend der folgenden Zeile gibt der Staat eine Aufgabetask
:InformationsquelleAutor der Antwort Marcin
Erstellen einer
AsyncResult
Objekt aus der task-id ist den Weg empfohlen, die FAQ erhalten Sie den task-status, wenn die einzige Sache, die Sie haben, ist die task-id.Jedoch, als der Sellerie 3.x gibt es erhebliche Einschränkungen, die könnten beißen Menschen, wenn Sie nicht zahlen Aufmerksamkeit auf Sie. Es hängt wirklich von der jeweiligen Nutzung-case-Szenario.
Standardmäßig Sellerie nicht aufzeichnen "laufen".
Um Sellerie zu erfassen, dass eine Aufgabe ausgeführt wird, müssen Sie
task_track_started
zuTrue
. Hier ist eine einfache Aufgabe, dass die tests:Wenn
task_track_started
istFalse
das ist der Standard, den Staat zeigen istPENDING
auch wenn die Aufgabe gestartet wurde. Wenn Sietask_track_started
zuTrue
dann ist der StaatSTARTED
.Der Staat
PENDING
bedeutet "ich weiß es nicht."Einer
AsyncResult
mit dem StaatPENDING
bedeutet nichts mehr als, dass Sellerie nicht wissen, den status der Aufgabe. Dies könnte aufgrund einer Reihe von Gründen.Für eine Sache, die
AsyncResult
konstruiert werden können, die mit Ungültiger task-ids. Solche "Aufgaben" werden, als bis von Sellerie:Ok, also niemand wird zu füttern offensichtlich ungültige ids
AsyncResult
. Fair genug, aber es hat auch zur Wirkung, dassAsyncResult
wird auch prüfen, eine Aufgabe, die erfolgreich ausgeführt wurde, aber, dass Sellerie vergessen hat, alsPENDING
. Wieder in einigen use-case-Szenarien dies kann ein problem sein. Ein Teil des Problems hängt davon ab, wie Sellerie so konfiguriert ist, dass die Ergebnisse von Aufgaben, denn es hängt von der Verfügbarkeit der "Grabsteine" in die Ergebnisse backend. ("Grabsteine" ist der Begriff, der den Einsatz in der Sellerie-Dokumentation der Daten-chunks, die aufzeichnen, wie die Aufgabe beendet ist.) MitAsyncResult
wird nicht funktionieren, wenntask_ignore_result
istTrue
. Eine weitere leidige problem ist, dass Sellerie erlischt die Grabsteine standardmäßig. Dieresult_expires
Einstellung ist standardmäßig auf 24 Stunden festgelegt. So starten Sie eine Aufgabe, und notieren Sie die id in die langfristige Lagerung, und weitere 24 Stunden später, erstellen Sie eineAsyncResult
mit ihm, wird der statusPENDING
.Allen "echten Aufgaben" start in die
PENDING
Zustand. So bekommenPENDING
auf eine Aufgabe könnte bedeuten, dass die Aufgabe, die angefordert wurde, aber nie weiter als diese (warum auch immer). Oder es könnte bedeuten, dass die Aufgabe ausgeführt wurde, aber Sellerie vergaß seinen Zustand.Autsch!
AsyncResult
gewonnen ' T Arbeit für mich. Was kann ich sonst noch tun?Ich lieber behalten Ziele als verfolgen Aufgaben selbst. Ich halte einige Informationen zu Aufgaben, aber es ist wirklich zweitrangig für die Verfolgung der Ziele. Die Ziele sind gespeichert in der Speicher-unabhängig von Sellerie. Wenn eine Anforderung braucht, um eine Berechnung hängt davon ab, irgendein Ziel erreicht wurde, prüft es, ob das Ziel bereits erreicht worden ist, wenn ja, dann wird dieses zwischengespeichert Ziel, sonst startet er die Aufgabe, die Wirkung auf das Ziel, und sendet an den client, die HTTP-Anfrage eine Antwort, die angibt, sollte Sie warten, für ein Ergebnis.
Den Variablennamen und Links oben sind für Sellerie 4.x. In 3.x die entsprechenden Variablen und hyperlinks:
CELERY_TRACK_STARTED
CELERY_IGNORE_RESULT
CELERY_TASK_RESULT_EXPIRES
.InformationsquelleAutor der Antwort Louis
Können Sie auch benutzerdefinierte Staaten und update es Wert ist, duting die Ausführung der Aufgabe.
Dieses Beispiel ist aus docs:
http://celery.readthedocs.org/en/latest/userguide/tasks.html#custom-states
InformationsquelleAutor der Antwort msangel
Alte Frage, aber ich habe vor kurzem lief in dieses problem.
Wenn Sie versuchen, die task_id Sie können es so machen:
Nun wissen Sie genau, was die task_id ist und können es nun verwenden, um die AsyncResult:
InformationsquelleAutor der Antwort Cesar Rios
Abgesehen von den oben Programmatischen Ansatz
Mit Blumen-Task-status kann leicht gesehen werden.
Real-time-überwachung mit Sellerie Veranstaltungen.
Blume ist ein web-basiertes tool für die überwachung und Administration Sellerie-Cluster.
Offizielle Dokument:
Blume - Sellerie-monitoring-tool
Installation:
Verwendung:
InformationsquelleAutor der Antwort Roshan
Versuchen:
task.AsyncResult(task.request.id).state
dadurch wird der Sellerie Task-status. Wenn Sellerie Aufgabe ist bereits unter FEHLER Status wird eine Exception werfen:
raised unexpected: KeyError('exc_type',)
InformationsquelleAutor der Antwort spicyramen
für einfache Aufgaben, können wir http://flower.readthedocs.io/en/latest/screenshots.html und http://policystat.github.io/jobtastic/ zu tun, die überwachung.
und für komplizierte Aufgaben, sagen, eine Aufgabe, die sich mit vielen anderen Modulen. Wir empfehlen manuell erfassen, den Fortschritt und die Nachricht auf die spezifische Aufgabe, die Einheit.
InformationsquelleAutor der Antwort taotao.li
Fand ich hilfreiche Informationen, die
Sellerie Projekt Beschäftigten Guide Inspektion-Arbeiter
Für meinen Fall, bin ich überprüfen, um zu sehen, ob Sellerie ausgeführt wird.
Können Sie spielen, mit überprüfen Sie Ihre Bedürfnisse.
InformationsquelleAutor der Antwort zerocog