本地执行器¶
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
可以被认为是仅具有 1 个工作器的有限并行性的 LocalExecutor
,即 self.parallelism = 1
。此选项可以将本地运行的执行器实现统一到仅具有多种模式的 LocalExecutor
中。
注意
当在 airflow.cfg
的 [core]
部分中使用 executor = LocalExecutor
配置多个调度程序时,每个调度程序都会运行一个 LocalExecutor。这意味着任务将在运行调度程序的机器上以分布式方式进行处理。
应考虑一个因素
重新启动调度程序:如果重新启动调度程序,其他调度程序可能需要一些时间才能识别孤立的任务并重新启动或使它们失败。