実行するジョブがたくさんあります。100 としましょう。それらは並列に実行できますが、それぞれが多くのメモリを消費するため、同時に実行できるのは 8 つだけです。
私は現在、このシェルスクリプトを持っています:
(
(python run.py $arg1 &)
(python run.py $arg2 &)
(python run.py $arg3 &)
(python run.py $arg4 &)
(python run.py $arg5 &)
(python run.py $arg6 &)
(python run.py $arg7 &)
(python run.py $arg8 &)
) 2>&1 | cat -u
(
(python run.py $arg9 &)
(python run.py $arg10 &)
(python run.py $arg11 &)
(python run.py $arg12 &)
(python run.py $arg13 &)
(python run.py $arg14 &)
(python run.py $arg15 &)
(python run.py $arg16 &)
) 2>&1 | cat -u
...
これには、最初の 8 個のバッチを実行する効果があり、それらがすべて終了すると、次の 8 個のバッチが開始されます。 8 の中で最も遅いものが完了するのを効果的に待っているため、8 の各バッチが終了するのを重み付けするのは最適ではありません。
代わりに、100 個のジョブすべてを実行するスクリプト (シェルまたは Python) を用意し、最適な効率のために、いつでも 8 個のジョブを同時に実行できるようにしたいと考えています。
それを達成するためのアイデアはありますか?