在django中的Celery中止一个正在运行的任务

时间:2010-08-26 15:11:44

标签: python django rabbitmq celery celery-task

我希望能够中止从Celery队列运行的任务(使用rabbitMQ)。我使用

调用任务
task_id = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)

其中AsyncBoot是一个已定义的任务。

我可以获取任务ID(假设这是apply_async返回的长字符串)并将其存储在数据库中,但我不确定如何调用中止方法。我看到如何使Abortable tasks类使方法不可用,但如果我只有task-id字符串,我该如何在任务上调用.abort()?感谢。

2 个答案:

答案 0 :(得分:10)

apply_async会返回AsyncResult个实例,或者在这种情况下为AbortableAsyncResult。保存task_id并稍后使用它来实例化新的AbortableAsyncResult,如果您没有使用default_backend,请确保提供后端可选参数。

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

随后:

abortable_async_result = AbortableAsyncResult(myTaskId)
abortable_async_result.abort()

答案 1 :(得分:4)

您是否看到了参考文档? http://celeryq.org/docs/reference/celery.contrib.abortable.html

要中止任务,请使用result.abort()

>>> result = AsyncBoot.apply_async(...)
>>> result.abort()