3.1 GHz Intel Core i7 プロセッサと 16 GB または RAM を搭載した 2015 年初頭の MacBook Pro で +400 タスクの Airflow プロセスを実行しています。
私が実行しているスクリプトはこのように見えますが、DAG が次のように定義されている点が異なります。
default_args = {
'start_date': datetime.now(),
'max_active_runs': 2
}
あまりにも多くのタスクを並行して起動しないようにします。以下は、これを行った私の経験の一連のスクリーンショットです。ここでの私の質問は次のとおりです。
- この操作により、膨大な数の Python プロセスが生成されます。この方法で RAM 内のタスク キュー全体を定義する必要がありますか、それとも非常に多くのプロセスの起動を回避する「進行中にタスクを生成する」アプローチを取ることができるでしょうか。
max_active_runs
特定の時点で実際に作業を行っているプロセスの数を制御すると思います。ただし、自分のタスクを確認すると、CPU リソースを占有しているタスクが数十個あり、残りはアイドル状態になっています。これは本当に非効率的です。どうすればこの動作を制御できますか?
いくつかのスクリーンショットを次に示します。
物事は十分に良いスタートを切りました。予想よりも多くのプロセスが並行して実行されています。
すべてが行き詰まり、多くのアイドル プロセスがあります。物事は停止するように見えます:
ターミナルは大量のエラーメッセージを吐き出し始め、多くのプロセス障害があります:
プロセスは基本的に、終了するまでこれらのフェーズを循環します。最終的なタスクの内訳は次のようになります。
[2017-08-24 16:26:20,171] {jobs.py:2066} INFO - [backfill progress] | finished run 1 of 1 | tasks waiting: 0 | succeeded: 213 | kicked_off: 0 | failed: 200 | skipped: 0 | deadlocked: 0 | not ready: 0
何かご意見は?