恥ずかしながら最近になって知ったワークフローエンジン Apache Airflow。日本語の紹介記事もちらほら出てきていますが、公式ドキュメントをちょっとずつ抄訳しながら読んでいこうと思います。
ら読んでいきます。
12回目の今回はローカル・エグゼキューター(Local Executor)。
バージョン2.3.3時点のものです。
ローカル・エグゼキューター(Local Executor)
LocalExecutor
はさまざまモードでプロセスを生成しタスクを実行するエグゼキューターです。
親クラスのBaseExecutor
は生起するプロセスの数の上限を定めるパラメーターparallelism
を受け取ることができます。このパラメーターに0
が設定されている場合、LocalExecutor
は無制限にプロセスを生起することができます。
次のストラテジーが利用可能です:
-
無制限の並列度 (
self.parallelism == 0
):このストラテジーにおいては、エグゼキューターはexecute_async
が呼び出される都度新たなプロセスを生起します。LocalExecutor
に送信されたタスクはすべて専用のプロセスで実行されるということです。ひとたびタスクが実行され結果がresult_queue
に格納されると、プロセスは終了します。このアプローチにおいてtask_queue
は不要です。なぜならタスクには速やかに新しいプロセスがあてがわれるからです。このストラテジーにおいてプロセスはクラスLocalWorker
を利用します。 -
制限された並列度 (
self.parallelism > 0
):このストラテジーにおいては、プロセス数はstart
時点で指定されたself.parallelism
の値と等しくなります。タスクを受け取り、その処理をワーカー群に分配するために、task_queue
を利用します。ワーカーは準備ができ次第速やかにタスクを処理し始めます。LocalExecutor
の生存期間にわたってワーカー・プロセス群はタスクを処理したり待機したりします。LocalExecutor
は停止命令を受け取ると、ワーカー群を停止します。このストラテジーにおいてプロセスはクラスQueuedLocalWorker
を利用します。
細かな違いに目を瞑れば、SequentialExecutor
は並列度を1に制限(つまり self.parallelism = 1
)されたLocalExecutor
といって差し支えないでしょう。このオプションのおかげでローカルで実行されるエグゼキューターの実装が単一のものとなるかもしれません。
あるクラス(LocalExecutor)について説明しているさなかに別のクラス(BaseExecutor)に言及しだしたり。。。あるクラスと別のクラスは似ていて大は小を兼ねるから統合されうるだろうと(仕様ではなく)可能性のロードマップを語りだしたり。。。
こういう奔放でフランクで分かりにくいドキュメントはApache系らしいよね、と苦笑いしてしまいました。