Question

Je voudrais être en mesure d'interrompre une tâche qui est en cours d'exécution à partir d'une file d'attente de Céleri (en utilisant rabbitmq). J'appelle la tâche à l'aide

task_id = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)

où AsyncBoot est une tâche définie.

Je peux obtenir l'ID de tâche (en supposant que la longue chaîne est que les retours de apply_async) et le stocker dans une base de données, mais je ne suis pas sûr comment appeler une méthode d'abandon. Je vois comment faire des méthodes abortable avec la classe des tâches abortable mais si je ne dispose que la chaîne tâche id, comment puis-je appeler .abort () la tâche? Merci.

Était-ce utile?

La solution

apply_async renvoie une instance de AsyncResult, ou dans ce cas un AbortableAsyncResult. Enregistrez le task_id et l'utiliser pour instancier un nouveau AbortableAsyncResult plus tard, en vous assurant de fournir le back-end argument optionnel si vous ne l'utilisez le default_backend.

abortable_async_result = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)
myTaskId = abortable_async_result.task_id

Plus tard:

abortable_async_result = AbortableAsyncResult(myTaskId)
abortable_async_result.abort()

Autres conseils

Avez-vous vu la documentation de référence? http://celeryq.org/docs/reference/celery.contrib.abortable. html

Pour abandonner l'utilisation de la tâche result.abort():

>>> result = AsyncBoot.apply_async(...)
>>> result.abort()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top