我希望能够中止从Celery队列运行的任务(使用rabbitMQ)。我使用
调用任务task_id = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)
其中AsyncBoot是一个已定义的任务。
我可以获取任务ID(假设这是apply_async
返回的长字符串)并将其存储在数据库中,但我不确定如何调用中止方法。我看到如何使Abortable tasks类使方法不可用,但如果我只有task-id字符串,我该如何在任务上调用.abort()?感谢。
答案 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()