Search code examples
pythondjangorabbitmqcelerycelery-task

Abort a running task in Celery within django


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.


Solution

  • 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()