7

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

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

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

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

4

2 回答 2

11

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()
于 2010-08-31T08:43:15.730 回答
4

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

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

>>> result = AsyncBoot.apply_async(...)
>>> result.abort()
于 2010-08-27T13:21:13.470 回答