我需要实现以下方案:
我通过实现和弦实现了这一点,这里是简化代码:
# inside run() method of ATask chord_chain = [] for taskB_group in taskB.groups.all(): tasks = [BTask().si(id=taskB_model.id) for taskB_model in taskB_group.children.all()] if len(tasks): chord_chain.append(chord(tasks, _dummy_callback.s())) chord_chain.append(CTask().si(execution_id)) chain(chord_chain)()
问题是我需要能够在任何时间点在所有BTasks上调用revoke(terminate = True)。较低级别的问题是我无法访问BTask celery ID。
result = chain(chord_chain)()
获取BTask ID。但是我没有在返回的AsyncResult对象中找到该信息。是否有可能从这个对象获得链子id? (result.children是无)>>> r=AsyncResult(#ATask.id#) >>> r.children [<GroupResult: 5599ae69-4de0-45c0-afbe-b0e573631abc [#BTask.id#, #BTask.id#]>, <AsyncResult: #chord_unlock.id#>]
答案 0 :(得分:0)
通过使用中止状态标志标记ATask相关模型并在BTask开始时添加检查来解决。