J'utilise du céleri et du Django-céleri. J'ai défini une tâche périodique que j'aimerais tester. Est-il possible d'exécuter la tâche périodique à partir du shell manuellement pour que je puisse visualiser la sortie de la console?
Avez-vous essayé d'exécuter la tâche à partir du shell Django? Vous pouvez utiliser la méthode .apply
D'une tâche pour vous assurer qu'elle est exécutée avec impatience et localement.
En supposant que la tâche est appelée my_task
Dans Django app myapp
dans un sous-module tasks
:
$ python manage.py Shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
L'instance de résultat a la même API que le type habituel AsyncResult
, sauf que le résultat est toujours évalué avec impatience et localement et que la méthode .apply()
se bloquera jusqu'à ce que la tâche soit exécutée jusqu'à son terme.
Si vous voulez simplement déclencher une tâche lorsque la condition n'est pas remplie, par exemple, le temps périodique n'est pas respecté. Vous pouvez le faire en deux étapes.
1.Obtenez votre identifiant de tâche.
Vous pouvez le faire en tapant.
celery inspect registered
Vous verrez quelque chose comme app.tasks.update_something
. Si rien, c'est probablement que celery
n'a pas été démarré. Il suffit de l'exécuter.
2.Exécutez la tâche avec celery call
celery call app.tasks.update_something
Pour plus de détails, tapez simplement
celery --help
celery inspect --help
celery call --help
Je pense que vous devrez ouvrir deux shells: un pour exécuter des tâches à partir du shell Python/Django, et un pour exécuter celery worker
(python manage.py celery worker
). Et comme indiqué dans la réponse précédente, vous pouvez exécuter des tâches à l'aide de apply()
ou apply_async()
J'ai modifié la réponse afin que vous n'utilisiez pas une commande obsolète.