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文をさっと作ったらいいと思う。