0
我需要實現以下情形:獲取芹菜任務ID在先進的工作流程
- 執行任務A
- 並行執行多個任務B使用不同的參數
- 等待所有任務完成
- 以不同參數並行執行多個任務B
- 等待所有任務完成
- 執行任務C
我已經通過實施和絃鏈實現這一點,在這裏被簡化代碼:
# 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都是如此)。較低級別的問題是我無法獲得BTask芹菜ID。
- 試圖通過鏈
result = chain(chord_chain)()
獲得BTask ID。但是我沒有在返回的AsyncResult對象中找到這些信息。是否有可能從這個對象獲得連鎖兒童id? (result.children是None) - 試圖通過ATask AsyncResult獲取BTask ID,但似乎兒童屬性只包含結果第一個和絃而不是其他任務。
>>> r=AsyncResult(#ATask.id#) >>> r.children [<GroupResult: 5599ae69-4de0-45c0-afbe-b0e573631abc [#BTask.id#, #BTask.id#]>, <AsyncResult: #chord_unlock.id#>]