本章目標理解為什麼有先後依賴的工作需要先轉成圖,再安排執行順序
用 Python 建立可重現的拓樸排序與分階段執行流程
把簽核、上線準備與跨部門交付轉成可驗證的流程編排問題
情境與限制情境:你要安排一組有前置關係的任務,例如先整理需求、再完成文件、送審,最後才能上線
輸入:每個任務,以及它依賴哪些前置任務
輸出:一條可執行順序,或依批次整理好的分階段執行清單
限制:流程可能有遺漏依賴,也可能存在循環,導致永遠排不完
可重現規則本章程式碼位置:
examples/ch11/本章核心模組:
examples/ch11/workflow.py測試:
pytest -q tests/test_ch11_dependency_ordering_and_workflows.py典型用途:簽核流程、產品上線準備、資料管線執行順序、跨部門任務協作
有前後依賴的工作,不能只靠直覺排¶
很多工作不是單純列清單就能做,而是有明確先後順序。你不能先上線再送審,也不能先送審再完成文件。這類問題的核心不是挑哪件先做最快,而是先釐清哪些事情必須等別的事情完成。
把這種關係畫成圖之後,每個任務是一個節點,依賴關係則是一條邊。只要圖中沒有循環,就可以用拓樸排序找出一條合法順序;如果有循環,就表示流程本身有矛盾,需要先拆解。
為什麼不能只憑直覺排¶
當任務量很少時,人可以靠經驗記住順序;但一旦牽涉多個部門、多份文件或多個系統,直覺很容易漏掉隱藏依賴。實務上常見的兩種錯誤是:
以為某件事可以先做,實際上卡在前置項目還沒完成。
兩件事互相等待,最後整條流程完全停住。
把依賴顯性化之後,排序與除錯都會清楚很多。
一條順序與分階段執行是不一樣的¶
有時你只需要一條合法順序;但有時管理者更想知道的是「哪些事情可以同時開始」。這時比起單一路徑,分階段執行更有用,因為它能把同一輪可同步進行的工作放在一起。
所以本章除了回傳單一排序,也會提供依批次分組的結果,方便用在週會、看板或執行排程上。
實作範例¶
請參考 examples/ch11/workflow.py。請在專案根目錄執行程式,以確保路徑正確。
from examples.ch11.workflow import plan_execution_order, group_execution_stages
tasks = {
"A": [], # 無依賴
"B": [], # 無依賴
"C": ["A", "B"], # 依賴 A, B
"D": ["B"], # 依賴 B
"E": ["C", "D"], # 依賴 C, D
}
order = plan_execution_order(tasks)
print("執行順序:", order)
# 執行順序: ['A', 'B', 'C', 'D', 'E']
stages = group_execution_stages(tasks)
print("分階段執行清單:")
for i, stage in enumerate(stages):
print(f"階段 {i+1}: {stage}")
# 分階段執行清單:
# 階段 1: ['A', 'B']
# 階段 2: ['C', 'D']
# 階段 3: ['E']示範流程包含:
驗證依賴是否指向已定義任務
用拓樸排序找出一條可執行順序
把同一輪已就緒任務整理成分階段執行清單
在循環依賴出現時明確回報錯誤