Wie kann ich alle ausstehenden Aufgaben löschen, ohne die task_id
für jede Aufgabe zu kennen?
task
rabbitmq
celery
celery-task
Nabizan
quelle
quelle
manage.py celery purge
(celeryctl
ist jetzt veraltet und wird in 3.1 weg sein).redis-cli KEYS "celery*" | xargs redis-cli DEL
die, die für mich funktioniert hat. Dadurch werden alle Aufgaben gelöscht, die im von Ihnen verwendeten Redis-Backend gespeichert sind.celery purge
(innerhalb der relevanten virtuellen Umgebung). Hoppla - es gibt eine Antwort mit der gleichen unten ..... stackoverflow.com/a/20404976/1213425-A
die Django-App ist, in dercelery.py
sich die befindet.Für Sellerie 3.0+:
So löschen Sie eine bestimmte Warteschlange:
quelle
celery -A proj purge
.Für Sellerie 2.x und 3.x:
Wenn Sie beispielsweise einen Worker mit dem Parameter -Q verwenden, um Warteschlangen zu definieren
dann
celery purge
funktioniert es nicht, da Sie die Warteschlangenparameter nicht an ihn übergeben können. Es wird nur die Standardwarteschlange gelöscht. Die Lösung besteht darin, Ihre Mitarbeiter mit folgenden--purge
Parametern zu starten :Dadurch wird jedoch der Worker ausgeführt.
Eine andere Möglichkeit ist die Verwendung des Unterbefehls amqp von Sellerie
quelle
In Sellerie 3+:
CLI:
Programmatisch:
http://docs.celeryproject.org/en/latest/faq.html#how-do-i-purge-all-waiting-tasks
quelle
Ich habe festgestellt, dass
celery purge
dies für meine komplexere Selleriekonfiguration nicht funktioniert. Ich verwende mehrere benannte Warteschlangen für verschiedene Zwecke:Die erste Spalte ist der Warteschlangenname, die zweite die Anzahl der in der Warteschlange wartenden Nachrichten und die dritte die Anzahl der Listener für diese Warteschlange. Die Warteschlangen sind:
Die Analyseaufgabe ist eine Brute-Force-Aufgabe, die bei kleinen Datenmengen hervorragend funktioniert hat. Die Verarbeitung dauert jetzt jedoch mehr als 24 Stunden. Gelegentlich geht etwas schief und es bleibt beim Warten auf die Datenbank hängen. Es muss neu geschrieben werden, aber bis dahin, wenn es stecken bleibt, töte ich die Aufgabe, entleere die Warteschlange und versuche es erneut. Ich erkenne "Stuckness", indem ich mir die Anzahl der Nachrichten für die Analytics-Warteschlange ansehe, die 0 (fertige Analytics) oder 1 (Warten auf das Ende der Analytics der letzten Nacht) sein sollte. 2 oder höher ist schlecht und ich bekomme eine E-Mail.
celery purge
bietet an, Aufgaben aus einer der Broadcast-Warteschlangen zu löschen, und ich sehe keine Option zum Auswählen einer anderen benannten Warteschlange.Hier ist mein Prozess:
quelle
celeryctl purge
funktionierte nicht mit benannten Warteschlangen.python manage.py celery amqp queue.purge <queue_name>
tat. Ich denke, der Kontext ist nützlich für diejenigen mit komplexen Setups, damit sie herausfinden können, was sie tun müssen, wennceleryctl purge
dies für sie fehlschlägt.manage.py
in meinem Sellerie 3.1.17 nicht finden , wurde die Datei entfernt oder nur neu verprügelt? Ich habe jedoch gefunden, wie die entsprechende Schnittstelle (queue.purge
) aussieht*/bin/amqp.py
. Aber nachdem ich versucht habe, den Inhalt der Datei mit der Dokumentation zu korrelieren, muss ich bedauerlicherweise zugeben, dass Sellerie absolut undokumentiert und auch eine sehr verworrene Arbeit ist, zumindest gemessen am Quellcode.manage.py
ist das Django-Verwaltungsskript undmanage.py celery
führt Sellerie aus, nachdem die Konfiguration aus den Django-Einstellungen geladen wurde. Ich habe Sellerie außerhalb von Django nicht verwendet, aber der enthaltenecelery
Befehl könnte genau das sein, wonach Sie suchen: celery.readthedocs.org/en/latest/userguide/monitoring.htmlIn Sellerie 3+
http://docs.celeryproject.org/en/3.1/faq.html#how-do-i-purge-all-waiting-tasks
CLI
Benannte Warteschlange löschen:
Konfigurierte Warteschlange löschen
Um die gesamte Warteschlange zu löschen, müssen die Mitarbeiter gestoppt werden.
quelle
Wenn Sie alle ausstehenden Aufgaben sowie die aktiven und reservierten Aufgaben entfernen möchten, um Sellerie vollständig zu stoppen, hat dies für mich funktioniert:
quelle
1. Um die Warteschlange ordnungsgemäß von wartenden Aufgaben zu leeren, müssen Sie alle Mitarbeiter stoppen ( http://celery.readthedocs.io/en/latest/faq.html#i-ve-purged-messages-but-there-are- Standbildnachrichten in der Warteschlange ):
oder (falls RabbitMQ / Message Broker vom Supervisor verwaltet wird):
2. ... und löschen Sie dann die Aufgaben aus einer bestimmten Warteschlange:
3. Starten Sie RabbitMQ:
oder (falls RabbitMQ vom Supervisor verwaltet wird):
quelle
Sellerie 4+ Befehl zum Löschen von Sellerie zum Löschen aller konfigurierten Aufgabenwarteschlangen
programmatisch:
Alle anstehenden Aufgaben werden gelöscht. Referenz: celerydoc
quelle