I would like to be able to abort a task that is running from a Celery queue (using rabbitMQ). I call the task using
task_id = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)
where AsyncBoot is a defined task.
I can get the task ID (assuming that is the long string that apply_async
returns) and store it in a database but I'm unsure how to call an abort method. I see how to make methods abortable with the Abortable tasks class but if I only have the task-id string, how do I call .abort() on the task? Thanks.
apply_async
returns an AsyncResult
instance, or in this case an AbortableAsyncResult
. Save the task_id
and use that to instantiate a new AbortableAsyncResult
later, making sure you supply the backend optional argument if you're not using the default_backend
.
abortable_async_result = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)
myTaskId = abortable_async_result.task_id
Later:
abortable_async_result = AbortableAsyncResult(myTaskId)
abortable_async_result.abort()
Did you see the reference documentation? http://celeryq.org/docs/reference/celery.contrib.abortable.html
To abort the task use result.abort()
:
>>> result = AsyncBoot.apply_async(...)
>>> result.abort()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With