本地執行器¶
LocalExecutor 透過以受控方式在不同模式下生成程序來執行任務。
鑑於 BaseExecutor 可以選擇接收一個 parallelism 引數來限制生成的程序數量,當此引數為 0 時,LocalExecutor 可以生成的程序數量是無限的。
實現了以下策略
- 無限並行 (
self.parallelism == 0):在此策略中,LocalExecutor 將會每次呼叫execute_async時生成一個程序,也就是說,提交給LocalExecutor的每個任務都將在自己的程序中執行。任務執行完成後,結果儲存在result_queue中,程序隨即終止。這種方法無需使用task_queue,因為一旦接收到任務,就會為其分配一個新的程序。在此策略中使用的程序屬於LocalWorker類。 - 有限並行 (
self.parallelism > 0):在此策略中,LocalExecutor會在start時生成數量等於self.parallelism值的程序數量,並使用task_queue來協調任務的接收和工作在工作程序之間的分配,工作程序一旦準備好就會領取任務。在 LocalExecutor 的生命週期內,工作程序持續執行等待任務,一旦LocalExecutor 接收到關閉執行器的呼叫,就會向工作程序傳送一個“毒丸”令牌 (poison token) 以終止它們。在此策略中使用的程序屬於QueuedLocalWorker類。
注意
在 `airflow.cfg` 檔案的 `[core]` 部分,當配置多個 Scheduler 並將 executor = LocalExecutor 時,每個 Scheduler 都會執行一個 LocalExecutor。這意味著任務將在執行 Scheduler 的機器之間以分散式方式處理。
應考慮以下一點
重啟 Scheduler:如果一個 Scheduler 重啟,其他 Scheduler 可能需要一些時間來識別孤立(orphaned)任務並重啟或使它們失敗。