GNU parallel

提供: Eospedia
移動: 案内検索

GNU parallelとは

  • 任意のコマンドを並列で実行してくれるお助けコマンドラインツール。
  • 意外と知っている人が少ない感があるが、使ってみると超便利。

GNU parallel勉強リソース

コマンド備忘録

  • 具体的なコマンドとともに。

lsでファイルをリストアップし、ローカルマシンで並列処理

カレントディレクトリ内の.tifファイルを.mrcファイルに変換する処理を4プロセス並列で。

ls *.tif | parallel -j 4 'e2proc2d.py --apix 1.9 --outmode uint16 --outtype mrc --fixintscaling noscale {} {.}.mrc'

{} は ls *.tif からパイプ( | )を通して渡された個々のファイル名を表し、{.} は末尾の拡張子を除去することを意味する。

即ち、{} が hoge.tif であるとき、{.} は hoge となり、{.}.mrc は hoge.mrc となる。


テキストファイルに記述したコマンドを並列処理

例えばテキストファイル hoge.comに、以下のように実行したいコマンドを並べて書いたとする。(tiffをmrcに変換するコマンドです。)

e2proc2d.py fuga001.tiff fuga001.mrc
e2proc2d.py fuga002.tiff fuga002.mrc
e2proc2d.py fuga003.tiff fuga003.mrc
e2proc2d.py fuga004.tiff fuga004.mrc
... (以下略)

例えば4プロセス並列で上記ファイル内のコマンドを処理していくには、

> parallel -j 4 < hoge.com

とやればいい。

進捗状況や残り時間を表示するには、例えば

> parallel -j 4 --eta --progress < hoge.com

とすれば良いが、こうするとhoge.com内のコマンドの標準出力とごっちゃに表示されてしまう。

実行している方のコマンドの標準出力はファイルへリダイレクトしてあげると良い。

> parallel -j 4 --eta --progress <  hoge.com > piyo.log

GNU Parallelの記法は結構ややこしくて覚える気にならないので、個人的にはPythonとかシェルスクリプトとかでコマンドファイルを生成し、上記のように実行させる感じで使っていこうと思う。実行したコマンドもファイルとして残せるし。