「GNU parallel」の版間の差分

提供: Eospedia
移動: 案内検索
(lsでファイルをリストアップし、ローカルマシンで並列処理)
(コマンド備忘録)
行19: 行19:
  
 
即ち、{} が hoge.tif であるとき、{.} は hoge となり、{.}.mrc は hoge.mrc となる。
 
即ち、{} が hoge.tif であるとき、{.} は hoge となり、{.}.mrc は hoge.mrc となる。
 +
 +
 +
=== テキストファイルに記述したコマンドを並列処理 ===
 +
例えば以下のようなテキストファイル hoge.comを書いたとする。
 +
<pre>
 +
e2proc2d.py fuga001.tiff fuga001.mrc
 +
e2proc2d.py fuga002.tiff fuga002.mrc
 +
e2proc2d.py fuga003.tiff fuga003.mrc
 +
e2proc2d.py fuga004.tiff fuga004.mrc
 +
... (以下略)
 +
</pre>
 +
 +
例えば4プロセス並列で上記ファイル内のコマンドを処理していくには、
 +
<pre>
 +
> parallel -j 4 < hoge.com
 +
</pre>
 +
とやればいい。
 +
 +
進捗状況や残り時間を表示するには、例えば
 +
<pre>
 +
> parallel -j 4 --eta --progress < hoge.com
 +
</pre>
 +
とすれば良いが、こうするとhoge.com内のコマンドの標準出力とごっちゃに表示されてしまう。
 +
 +
実行している方のコマンドの標準出力はファイルへリダイレクトしてあげると良い。
 +
<pre>
 +
> parallel -j 4 --eta --progress <  hoge.com > piyo.log
 +
</pre>
 +
 +
GNU Parallelの記法は結構ややこしくて覚える気にならないので、個人的にはPythonとかシェルスクリプトとかでコマンドファイルを生成し、上記のように実行させる感じで使っていこうと思う。実行したコマンドもファイルとして残せるし。

2019年9月4日 (水) 14:42時点における版

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を書いたとする。

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とかシェルスクリプトとかでコマンドファイルを生成し、上記のように実行させる感じで使っていこうと思う。実行したコマンドもファイルとして残せるし。