web-dev-qa-db-fra.com

Comment exécuter manuellement une tâche périodique de céleri à partir du shell?

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?

66
Mridang Agarwalla

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.

88
Platinum Azure

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
10
W.Perrin

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.

6
darkphoenix