2013年2月14日木曜日

parallel で並列処理

ちょっと必要になったので並列処理してみた。


たとえば、
html ディレクトリ以下のすべての .html 拡張子を持つファイルの行数を表示する。
ただし、行数を表示するたびに1秒待つ (重い処理を想定)


find で処理するためには、よくこんな感じで処理してました。
find html -name "*.html" -printf "wc -l %p; sleep 1" | sh
find コマンドが、以下のようなスクリプトを生成してくれるので、
wc -l html/aaa.html; sleep 1
wc -l html/bbb.html; sleep 2
...
それをパイプで sh に渡します。

短い場合はこれでいいんですが、ファイル数が多いなどの時間がかかる場合は
並列処理したくなります。

そこで parallel.
上と同じことを 10 並列でする場合は、以下のような感じ
parallel -j 10 -i sh -c "wc -l {}; sleep 1" -- `find html -name "*.tex"`
 -- 以下のリストを順番に {} に代入して、並列で実行してくれます。

0 件のコメント:

コメントを投稿