本地執行器¶
LocalExecutor
透過以受控方式在不同模式下產生進程來執行任務。
鑑於 BaseExecutor 可以選擇接收 parallelism
參數以限制產生的進程數量,當此參數為 0
時,LocalExecutor 可以產生的進程數量不受限制。
以下策略已實作
- 無限並行處理 (
self.parallelism == 0
):在此策略中,LocalExecutor 將在每次呼叫execute_async
時產生一個進程,也就是說,提交給LocalExecutor
的每個任務都將在其自己的進程中執行。一旦任務執行且結果儲存在result_queue
中,進程就會終止。在此方法中,不需要task_queue
,因為一旦收到任務,就會為任務分配一個新的進程。此策略中使用的進程屬於LocalWorker
類別。 - 有限並行處理 (
self.parallelism > 0
):在此策略中,LocalExecutor
會產生等於self.parallelism
值的進程數量 (在start
時),使用task_queue
來協調任務的攝取和工作分配給工作者,工作者會在準備就緒後立即取得任務。在LocalExecutor 的生命週期中,工作者進程會持續執行並等待任務,一旦LocalExecutor 收到關閉執行器的呼叫,就會將毒藥令牌傳送給工作者以終止它們。此策略中使用的進程屬於QueuedLocalWorker
類別。
可以說,SequentialExecutor
可以被認為是 LocalExecutor
,其並行處理能力有限,只有 1 個工作者,即 self.parallelism = 1
。此選項可能會導致將本地執行的執行器實作統一為單一 LocalExecutor
,並具有多種模式。
注意
當多個排程器在 airflow.cfg
的 [core]
區段中配置 executor = LocalExecutor
時,每個排程器都會執行一個 LocalExecutor。這表示任務將在執行排程器的機器之間以分散式方式處理。
應考慮一個注意事項
重新啟動排程器:如果重新啟動排程器,其他排程器可能需要一些時間才能識別孤立任務並重新啟動或使其失敗。