xargsを使ってお手軽に分散処理をしよう!

複数のパラメータがあって、どのパラメータの組み合わせがいいのか?調べたい。でも多重for文を使うと大変なことに(ただでさえRのforはク・・

bashコマンドのxargsを併用して、お手軽に分散処理をする。

参考にしたサイト:ここ

用意するもの

1 パラメータの組み合わせを記述したファイル input.data
2 パラメータの組をinputにして、何かしらの出力が得られるスクリプト

ここでは1に

2 3 4
3 4 5
4 5 6

2に

#!/usr/bin/python
import sys

one=int(sys.argv[1])
two=int(sys.argv[2])
three=int(sys.argv[3])

sum_input=one+two+three
print(sum_input)

outf=open('./test/test'+str(sum_input), 'w')
outf.write(str(sum_input))

を使う。

で、実行するxargsコマンドは以下
cat input.data | xargs -L 1 -P 2 python test_xargs2.py
xargsの引数説明
-L:何行ずつ処理するか?ここでは1行ずつ処理してほしいので1にする
-P:いくつのプロセスに分割するか?めっちゃ重要。いまは-P 2なので、2プロセスに分割してジョブを投げている。

で得られる結果はこちら

6
9
12
15

表示はよくわからないけど、実際には2つのプロセスに分けて実行されているので、通常より早くなる(たぶん)

たまに、「input.dataはどうやって簡単につくったらいいですか?」って質問されるけど、自分の得意な言語でfor文をさっと作ったらいいと思う。