本地执行器¶
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)任务并重启或使它们失败。