本地执行器¶
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 收到关闭执行器的调用,就会向工作进程发送毒药令牌以终止它们。 此策略中使用的进程是QueuedLocalWorker
类。
可以说,SequentialExecutor
可以被认为是只有一个工作进程的有限并行性的 LocalExecutor
,即 self.parallelism = 1
。 此选项可能会导致将本地运行的执行器实现统一为一个具有多种模式的 LocalExecutor
。
注意
当在 airflow.cfg
的 [core]
部分配置多个具有 executor = LocalExecutor
的调度器时,每个调度器都会运行一个 LocalExecutor。 这意味着任务将在运行调度器的机器之间以分布式方式处理。
应考虑以下事项
重启调度器:如果重启调度器,其他调度器可能需要一些时间才能识别孤立任务并重启或失败它们。