macOS のシェルで並列処理
気持ち
- macOS のシェルで並列処理をしたい.
- CPUの同時利用数は制限したい
- コマンドの使い方をなるべく覚えたくない(忘れるので)
やったこと
GNU parallel を使う. これはいろんなことができるらしいが,細かいことは絶対に覚えられないので面倒でもユニバーサルに対応できる次の方法で対応する
まずやりたい処理を次のようにファイル ( cmd.txt
) に書き出す.
cmd1 ; cmd2; cmd3 # cmd1 ~ 3 をひとまとめにし,直列で動かしたい. cmd4; ccmd 5 cmd6; cmd 7
各行がひとつの処理のまとまりである.
以下のコマンドで,「同時に2ジョブ ( -j 2
) までを走らせ,まとまり単位で並列に処理する.まとまりの中では,直列に処理する」ことができる
cat cmd.txt | parallel -j 2 -u
-u
は,出力を parallel で貯めないでリアルタイム垂れ流すオプション(cmd1, cmd2 の結果の行が混在することになる.嫌なら,-u を外す)
もちろんcat を使いたくないなら,echo でも同じことができる
echo """ cmd1 ; cmd2; cmd3 cmd4; ccmd 5 cmd6; cmd 7 """ | parallel -j 2 -u