BLOGTIMES
2012/03/13

xargs でコマンドを並列実行(複数起動)させる

  cli  programming 
このエントリーをはてなブックマークに追加

ディレクトリにあるファイルを一括で処理したいときに find と xargs の組み合わせでスクリプトを書くのは定番になっていますが、圧縮など一つ一つの処理がかなり重い場合、処理をシリアルに実行していくとものすごく時間がかかります。最近のCPUは複数コアを搭載している場合が多いですが、複数のコアを使って動くプログラムは少ないので、処理を複数のプロセスで並列実行すれば(CPUの空き時間を使い切れるので)早く終わらせることができます。

これまでは xargs を手動で2つ実行するとかアホなことをやっていたのですが、xargs 自体に複数プロセスを立ち上げさせる機能が備わっていたのを見つけたのでメモ。

xargsコマンドを使って指定したコマンドを並列実行させる - 技術メモ帳

あまり知られていないが、GNUのxargsコマンドには、プロセスの最大数を設定できるオプションというのが用意されている。
コレを使って、プロセスを並列実行させてみよう。
xargs --max-procs=MAX-PROCS -P MAX-PROCS command

ちょっとテストしてみましたが、確かに複数プロセスで処理できていますね。

$ date ; seq 1 5 | xargs -n1 -P 1 sleep ; date Tue Mar 13 17:59:40 JST 2012 Tue Mar 13 17:59:55 JST 2012 $ date ; seq 1 5 | xargs -n1 -P 5 sleep ; date Tue Mar 13 18:00:07 JST 2012 Tue Mar 13 18:00:12 JST 2012

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4827
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン