Articles Comments

ちからの備忘録的日記 » tips » xargs でお手軽に並列処理!

xargs でお手軽に並列処理!




仕事で Amazon S3 上に大量のファイルを作成しないといけなくなったので、s3curl.pl で以下のような感じで並列実行させようと思いました。

並列実行させようとすると、シェル実行時に & をつけて複数実行してあげれば、並列処理になります。そこで、そのようにシェルで実装してみたのですが、どうしても直列処理になってしました。

そういうときには、xargs!

コマンド実行例

$ cat list
1
2
$ time cat list | xargs -n1 sleep

real    0m3.021s
user    0m0.000s
sys     0m0.000s
$ time cat list | xargs -n1 -P2 sleep

real    0m2.010s
user    0m0.000s
sys     0m0.000s

-P オプションがない場合は直列処理なので3秒かかっていますが、-P2 の場合、並列処理となり、2秒で完了していることがわかると思います。

以下、マニュアル抜粋。

--max-procs=max-procs, -P max-procs
	Run up to max-procs processes at a time; the default is 1.  If max-procs is 0,  xargs
	will  run as many processes as possible at a time.  Use the -n option with -P; other-
	wise chances are that only one exec will be done.

デフォルトは同時実行が 1 で、0 を指定するとリソースが許す限り並列実行をします。

今回、Amazon S3 に -P0 で指定すると同時350コネクションぐらいとなり、コマンド自体は正常終了しましたが、Amazon 側でうまく処理できていませんでした・・・。いろいろ試した結果、私の環境では、50並列ぐらいだと安定して処理してくれるようでした。このような並列度合いの調整も簡単にできることがイイ!

・・・ということで、並列処理したいなと思ったら、xargs!

Related Posts Plugin for WordPress, Blogger...

Filed under: tips · Tags: ,

Leave a Reply

*