Ich benutze Sellerie und Django-Sellerie. Ich habe eine regelmäßige Aufgabe definiert, die ich testen möchte. Ist es möglich, die periodische Aufgabe manuell über die Shell auszuführen, damit ich die Konsolenausgabe anzeigen kann?
Ich benutze Sellerie und Django-Sellerie. Ich habe eine regelmäßige Aufgabe definiert, die ich testen möchte. Ist es möglich, die periodische Aufgabe manuell über die Shell auszuführen, damit ich die Konsolenausgabe anzeigen kann?
Antworten:
Haben Sie versucht, die Aufgabe nur über die Django-Shell auszuführen? Mit der .apply
Methode einer Aufgabe können Sie sicherstellen, dass sie eifrig und lokal ausgeführt wird.
Angenommen, die Aufgabe wird my_task
in der Django-App myapp
in einem tasks
Submodul aufgerufen :
$ python manage.py shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
Die Ergebnisinstanz hat dieselbe API wie der übliche AsyncResult
Typ, außer dass das Ergebnis immer eifrig und lokal ausgewertet wird und die .apply()
Methode blockiert wird, bis die Aufgabe vollständig ausgeführt wird.
manage.py
Skript erfordert, das Django in allen Django-Projektverzeichnissen generiert.) Entschuldigung.
Wenn Sie damit meinen, dass Sie nur eine Aufgabe auslösen, wenn die Bedingung nicht erfüllt ist, z. B. die periodische Zeit nicht erfüllt. Sie können dies in zwei Schritten tun.
1. Holen Sie sich Ihre Aufgaben-ID.
Sie können dies durch Eingabe tun.
celery inspect registered
Sie werden so etwas sehen app.tasks.update_something
. Wenn nichts, ist es wahrscheinlich, dass celery
nicht gestartet wurde. Lass es einfach laufen.
2. Führen Sie die Aufgabe mit aus celery call
celery call app.tasks.update_something
Für weitere Details geben Sie einfach ein
celery --help
celery inspect --help
celery call --help
celery -A yourapp call app.tasks.update_something --kwargs='{"key": value,...}'
inspect
es großartig ist, ist es leider nur für "RabbitMQ (AMQP) - und Redis-Transporte" verfügbar. (nicht andere wie filesystem
zum Beispiel)
Ich denke, Sie müssen zwei Shells öffnen: eine zum Ausführen von Aufgaben aus der Python / Django-Shell und eine zum Ausführen von celery worker
( python manage.py celery worker
). Und wie in der vorherigen Antwort angegeben, können Sie Aufgaben mit apply()
oder ausführenapply_async()
Ich habe die Antwort so bearbeitet, dass Sie keinen veralteten Befehl verwenden.