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