设置: python 3.7.3, 芹菜4.3.0, RabbitMQ 3.7.16, Redis 5.0.4
我正在尝试构建一个显示画布流的应用程序。 我将RabbitMQ用作代理,将Redis用作后端。
请考虑以下画布流程:
cf = add.si(0, 0) | group(add.si(1, 1), add.si(2, 2)) | add.si(3, 3)
res = c1.apply_async()
以调试模式运行并检查res
,一切看起来都很好:
res是上一个任务AsyncResult
的{{1}}实例,它没有子级,其父对象是add.si(3, 3)
实例。
查看GroupResult
子项也很好,我可以看到它有两个子项-GroupResult
和group(add.si(1, 1)
,其父级是add.si(2, 2)
实例{{1} }。
现在,当我尝试通过task_id获取AsyncResult
对象时,我期望看到相同的行为:
add.si(0, 0)
现在,我看到AsyncResult
为None。
为什么会这样?
再看一遍Flower,我可以看到task_info = AsyncResult(<uuid of task add.si(3, 3)>, app=app)
parent_id是task_info.parent
uuid-为什么?
我尝试实现事件循环侦听器(类似于Flower),但没有看到task add.si(3, 3)
任务。有办法看到吗?
是虫子吗?被设计隐藏了吗?我在Flower的日志中看到有一个add.si(0, 0)
任务。有没有办法揭露它?
GroupResult
这是我的代码:
celery.group
我打开了问题here。