buq’s blog

覚えておきたいけど覚えておけなさそうなことを書きます?

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