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 .applyMethode einer Aufgabe können Sie sicherstellen, dass sie eifrig und lokal ausgeführt wird.
Angenommen, die Aufgabe wird my_taskin der Django-App myappin einem tasksSubmodul aufgerufen :
$ python manage.py shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
Die Ergebnisinstanz hat dieselbe API wie der übliche AsyncResultTyp, 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.pySkript 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 celerynicht 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,...}'
inspectes großartig ist, ist es leider nur für "RabbitMQ (AMQP) - und Redis-Transporte" verfügbar. (nicht andere wie filesystemzum 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.