ファイルまたは標準入力からコマンドリストを読み込み並列実行するperlスクリプト。
並列実行するコマンドの最大数をコマンド引数から指定できます。
(from gist:4037338)
xargs -P
や GNU parallel
でも同様のことができますが、perlスクリプト内で
並列実行したい場合に本レポジトリのコードを流用できます。
並列実行するコマンドの最大数を3に指定して実行する例:
% ./parallel.pl -3 commandlist.txt
結果:
[2018-10-21 11:15:50] 29887 sleep 7 ; echo "command #1 done."
[2018-10-21 11:15:50] 29888 sleep 2 ; echo "command #2 done."
[2018-10-21 11:15:50] 29890 sleep 2 ; echo "command #3 done."
command #3 done.
command #2 done.
[2018-10-21 11:15:52] 29896 sleep 3 ; echo "command #4 done."
[2018-10-21 11:15:52] 29897 sleep 4 ; echo "command #5 done."
command #4 done.
[2018-10-21 11:15:55] 29902 sleep 3 ; echo "command #6 done."
(以下省略)
コマンドの前の数値はプロセスIDです。
コマンドリストを標準入力から与えることもできます:
% head -10 commandlist.txt | ./parallel.pl -3
コマンドリスト内のジョブを複数のノードに振り分けて効率よく実行します。
各ノードでは1ジョブずつ実行し、終了したら次のジョブが投入されます。
% ./parallelhost.pl commandlist.txt
parallelhost.pl
内の @host_list
で計算ノードリストを指定します。
xargs -P
や GNU parallel
でも同様のことができます。
xargs
を使って sh -c {}
に渡すとコマンドとして実行できます。
-t
で実行されるコマンドを標準エラー出力に表示し、-P
で並列数を指定できます。
% cat commandlist.txt | xargs -t -P 3 -I{} sh -c {}
-t
で実行されるコマンドを標準エラー出力に表示し、-P
で並列数を指定できます。
% cat commandlist.txt | parallel -t -P 3
Copyright © 2012-2024 Yuki Naito
(@meso_cacase)
This software is distributed under
modified BSD license.