2014-03-29 40 views
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。

  1. 試圖通過鏈result = chain(chord_chain)()獲得BTask ID。但是我沒有在返回的AsyncResult對象中找到這些信息。是否有可能從這個對象獲得連鎖兒童id? (result.children是None)
  2. 試圖通過ATask AsyncResult獲取BTask ID,但似乎兒童屬性只包含結果第一個和絃而不是其他任務。
 
>>> r=AsyncResult(#ATask.id#) 
>>> r.children 
[<GroupResult: 5599ae69-4de0-45c0-afbe-b0e573631abc [#BTask.id#, #BTask.id#]>, 
<AsyncResult: #chord_unlock.id#>] 

回答

0

通過標記與中止狀態標誌ATask相關模型,並在BTask開始增加檢查解決。