我想采用所示的承诺协议in the docs。 提供的示例有效,但承诺在工作方处理。 相反,我希望得到客户的通知。
这是我的test.py:
from celery import Celery
app = Celery(broker='amqp://', backend='rpc')
@app.task
def add(x, y):
return x + y
在客户端,我输入以下命令:
import test
test.add.delay(2, 2).then(lambda: print('OK'))
在谷歌搜索时,我碰到this所以显然我不是唯一一个努力理解它应该如何工作的人。
我的理解是,一旦任务被处理完毕,结果应该被发送回客户端,然后回调应该触发,但事实并非如此,我的承诺永远不会得到解决。
我的理解是否正确? 这是理想的行为吗?
THX
答案 0 :(得分:0)
根据后端,分辨率的“检查”不会自动发生。您需要积极.ready()
或.wait()
。您可能希望将此检查推迟到副线程左右。
在amqp
后端,当您尝试.ready()
AsyncResult时,它将解析。然后它意味着汇集分辨率。在某个地方,我已经读过redis
后端没有合并的分辨率,但还没有挖掘它的代码。
我正在实现一个类似于ThreadPoolExecutor的CeleryExecutor,并且必须在周围进行.ready()
检查以触发Future解析。