调用可中止同步结果实例的中止方法会导致"RuntimeError: RPC backend missing task request for task_id"



我尝试在celele(5.1.2(中实现一个具有可中止任务的工作示例(下面的代码片段(。当我呼叫";中止";AbortableAsyncResult实例异常上的方法";RuntimeError:{task_id}的RPC后端缺少任务请求"被提起。

我做错了什么?为什么代码段不起作用?

我试图在谷歌上搜索答案,但只得到了旧芹菜问题的链接,这些链接提到AbortableTask将在芹菜4.0.0中删除(我使用的是芹菜5.1.2,AbortableTask在那里(。

from time import sleep
from celery import Celery
from celery.contrib.abortable import AbortableTask
celery_app = Celery(
broker = "amqp://login:pass@rabbitmq:5672"
backend = "rpc://"
include = ["root.subpath.my_tasks_module"]
@celery_app.task(acks_late=True, bind=True, base=AbortableTask)
def my_task(self, a, b):
sleep(100)
if self.is_aborted():
return None
return a * b
def foo():
abortable_async_result = my_task.delay(4, 4)
sleep(10)
abortable_async_result.abort()  # This call raises exception

感谢您的关注和回答。

用数据库后端替换RPC后端使其正常工作。

起初,我没有仔细阅读AbortableTask文档中的注释:

为了中止任务,生产者和消费者之间需要进行通信。这目前是通过数据库后端实现的。因此,这个类将只使用数据库后端。

相关内容

最新更新