シェルスクリプトでお手軽並列処理
大規模な分散処理をする必要はなくても、並列処理を行なって手早く結果が欲しいケースがよくある。
そんな時にシェルスクリプトを使って、お手軽に並列処理をしてみるのが便利なのではないか。
パイプ処理を活用する。
$ cat hoge.csv | python a.py | python b.py > result.csv
a.pyやb.pyを標準入出力でデータを受け渡しするようなプログラムを作成する。
例えば、
#!/usr/bin/python # -*- coding:utf-8 -*- import sys for line in sys.stdin: row = line.split(",") print(",".join(row[0],row[1]))
このようにすることで、a.pyの処理中に、逐次的にb.pyのプログラムも実行することが出来る。
xargsで並列処理
$ cat data.csv | xargs -L 2 -P 4 python ./hoge.py 15 25 20 35 30
-Lで何行ずつ処理をするか指定し、-Pで何スレッドで処理するかを指定する。
data.csvは、次のようなものである。
1,2,3,4,5 2,3,4,5,6 3,4,5,6,7 4,5,6,7,8 5,6,7,8,9
また、hoge.pyは、次のように記述して、データを受け取る。
#!/usr/bin/python # -*- coding:utf-8 -*- import sys for line in sys.argv[1:]: row = line.split(",") row = [int(w) for w in row] print(sum(row))
このようにして、短いコード数でも手軽に並列処理を行うことが出来る。