在Django中中止Celery中的运行任务
我想要能够中止一个正在运行的任务,这个任务是从Celery队列中来的(使用rabbitMQ)。我通过下面的方式来调用这个任务:
task_id = AsyncBoot.apply_async(args=[name], name=name, connect_timeout=3)
这里的AsyncBoot是一个已经定义好的任务。
我可以获取到任务的ID(我假设这个长字符串就是apply_async
返回的内容),并把它存储在数据库里,但我不太确定怎么调用一个中止的方法。我看到有一种方法可以让任务支持中止,就是使用Abortable任务类,但如果我只有任务ID字符串,我该如何在这个任务上调用.abort()呢?谢谢。
2 个回答
4
你看过参考文档吗?
可以在这里找到:http://celeryq.org/docs/reference/celery.contrib.abortable.html
要中止这个任务,可以使用 result.abort()
:
>>> result = AsyncBoot.apply_async(...)
>>> result.abort()
12
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()