xargs で並行処理を行う
xargs では、-P オプションを使うことで並列に処理を進められます。
# -P2 の 2 の数は何個並列で走らせるかを表す $ ... | xargs -P2
最大で走らせられる数の確認
プロセッサーの数を確認します。
# 以下ディレクトリのファイルの中身を見てプロセッサの数を確認 (linux) $ cat /proc/cpuinfo # 以下の変数でも確認できます $ echo $(nproc) 4
上で調べた数を使うと、最大効率が出せると思われます。
その際は以下のようにコマンド置換を使うと、ハードによらず最適な数を指定できます
# 全ての .png ファイルを、convert を使って .jpg に変換する例 $ ls *.png | sed 's/\.png//' | xargs -P$(nproc) -I@ convert @.png @.jpg
確認
並列処理されていることを確認する
# 並列処理なし ## 1 + 2 + 3 = 6 秒かかる $ time seq 3 | xargs -I@ sleep @ real 0m6.036s user 0m0.001s sys 0m0.044s # 並列処理あり ## max(1 + 2 + 3) = 3 秒かかる $ time seq 3 | xargs -P3 -I@ sleep @ real 0m3.025s user 0m0.009s sys 0m0.030s
おわりに
linux で並行で処理を使う機会はそうそうないかと思いますが、積極的に探して使っていきたいと思いました。
また、linux には他にも並行処理を実現する手段として、parallel
コマンドなども有名なようです。こちらも機会があればふれてみたいと思います。