在Django中中止Celery中的运行任务

8 投票
2 回答
3938 浏览
提问于 2025-04-16 03:20

我想要能够中止一个正在运行的任务,这个任务是从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()

撰写回答