Wie überprüfen Sie den task-status 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 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:
x
?Wo sehen Sie enqueue-jobs in Sellerie? Dort haben Sie die Rückkehr der task_id zu verfolgen, die Arbeit in der Zukunft.
Im Gegensatz zu @Marcin ' s, diese Antwort nicht verwendet die statische Methode Aufgabe.AsyncResult() als das Werk des AsyncResult, die hilfsbereit nutzt die backend-Konfiguration, ansonsten wird ein Fehler ausgelöst, wenn Sie versuchen, um das Ergebnis zu erhalten.
Die Kontroverse mit @gregor-code ist in der Instanziierung von
async_result
. In Ihren Fall, die Sie bereits hat, die Instanz, Sie sind gut zu gehen. Aber was passiert, wenn Sie nur die task-id, und die benötigen zum instanziieren einesasync_result
Instanz anrufen zu könnenasync_result.get()
? Dies ist eine Instanz derAsyncResult
Klasse, aber Sie können die raw-Klassecelery.result.AsyncResult
zu erhalten, müssen Sie die Klasse aus der Funktion umschlossen wird vonapp.task()
. In den Fall würden Sie tunasync_result = run_instance.AsyncResult('task-id')
Warum nicht? Es scheint gut zu funktionieren hier...
InformationsquelleAutor Gregor
Jeder
Task
Objekt hat einen.request
Eigenschaft, die es enthältAsyncRequest
Objekt. Entsprechend der folgenden Zeile gibt der Staat eine Aufgabetask
:Speichern oder abrufen? So oder so, ich weiß es nicht.
gelöst mit update_state und Ergebnis 😉
Gut gemacht! Wie haben Sie es tun?
Wenn ich dies mache, bekomme ich eine dauerhaft ANSTEHENDE AsyncResult, auch wenn ich warten lange genug für die Aufgabe zu beenden. Gibt es eine Möglichkeit, diese sehen sich der Zustand ändert? Ich glaube, mein backend konfiguriert ist, und ich habe versucht, CELERY_TRACK_STARTED=True ohne Erfolg.
InformationsquelleAutor 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
.Ja, ich würde getrennte Verfolgung der "Ziel" von der Beobachtung von "Aufgaben". Ich schrieb "führen Sie eine Berechnung, die abhängig von Ziel". In der Regel, das "Ziel" ist auch eine Berechnung. Zum Beispiel, wenn ich zeigen will Artikel X, um einen Benutzer ist, muss ich es konvertieren von XML in HTML, aber vorher muss ich haben beschlossen, alle Literaturangaben. (X ist wie ein journal Artikel.) Ich prüfen, ob das Ziel "Artikel X mit allen bibliographischen Referenzen aufgelöst" existiert und verwenden, anstatt zu versuchen, überprüfen Sie den task-status Sellerie Aufgabe, die würde berechnet haben die Zielsetzung, die ich will.
Und die information "Artikel X mit allen bibliographischen Referenzen aufgelöst" werden in einem cache-Speicher gespeichert und in ein eXist-db-Datenbank.
InformationsquelleAutor 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 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:
apply_async
. Das zurückgegebene Objekt durchapply_async
ist einAsyncResult
- Objekt, welches die id der Aufgabe, die Sellerie generiert.Korrigieren Sie mich, wenn ich falsch Liege, aber ist es nicht manchmal nützlich zum erzeugen einer UUID basierend auf einige Eingänge, so dass alle Anrufe, immer die gleichen Eingaben erhalten die gleiche UUID? IOW, vielleicht ist es manchmal nützlich, um anzugeben, Ihre task_id.
Die Frage des OP ist "wie kann ich überprüfen, task-status" und die Antwort hier sagt, "Wenn Sie versuchen, die task_id...". Weder die überprüfung der task-status, nicht immer
task_id
verlangen, dass Sie generieren eine task-id selbst. In Ihrem Kommentar haben Sie sich vorgestellt, ein Grund, geht jenseits "wie überprüfe ich den task-status" und "Wenn Sie versuchen, um die task_id...` Großartig, wenn Sie haben, dass müssen, aber es ist hier nicht der Fall. (Nebenbei, mituuid()
zum generieren einer task-id nicht absolut nichts über das hinaus, was Sellerie standardmäßig tut.)InformationsquelleAutor Cesar Rios
Nutzen Sie einfach die API von Sellerie FAQ
Diese funktioniert einwandfrei.
InformationsquelleAutor David Ding
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 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 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 zerocog
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 Roshan Bagdiya