GNU parallel

提供: Linux入門
2018年3月29日 (木) 15:05時点におけるDaemon (トーク | 投稿記録)による版 (ページの作成:「GNU parallel とは、コマンドを並列に実行するためのコマンドです。 '''読み方''' ;GNU parallel:ぐにゅー ぱられる __TOC__ == 概...」)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索
スポンサーリンク

GNU parallel とは、コマンドを並列に実行するためのコマンドです。

読み方

GNU parallel
ぐにゅー ぱられる

概要

最近のパソコン・サーバは、たくさんのCPUコアを持っています。処理によりますが、シーケンシャルに1つ1つ実行していくよりも、パラレルで実行したほうが、トータルで短い時間で処理を完了できる場合もあります。

スレッドやforkなどを利用して、処理を並列・並行で処理するプログラミングをすることがありますが、シェルスクリプトでも同じようなことがしたいこともあります。

例えば、100台のホストで同じインストールの処理を実行した場合に、1台ずつやるよりも、同時に100台まとめてやったほうが早いでしょう。

sh でも、 & をつければ、バックグラウンド実行できるし、バックグラウンド実行を wait コマンドで待つことができますが、たくさんのプロセスを待つといった場合に、コーディングの負担が大きくなっていくのではないでしょうか。

GNU の parallel コマンドは、コマンドであっても、簡単に並列化してしまおうというものです。

インストール

Ubuntu

sudo apt install parallel

MacOS

brew install parallel

使い方

簡単な例

parallel -a hosts.txt your_command

引数を展開して実行する方法

この例の ::: はセパレータとして扱われます。

$ parallel echo ::: 1 2 3 ::: a b c

echo コマンドに、 1 から 3 と a から b が展開されて渡されます。

$ parallel echo ::: 1 2 3 ::: a b c
When using programs that use GNU Parallel to process data for publication please cite:
 
  O. Tange (2011): GNU Parallel - The Command-Line Power Tool,
  ;login: The USENIX Magazine, February 2011:42-47.
 
This helps funding further development; and it won't cost you a cent.
Or you can get GNU Parallel without this requirement by paying 10000 EUR.
 
To silence this citation notice run 'parallel --bibtex' once or use '--no-notice'.
 
1 a
1 b
1 c
2 a
2 b
2 c
3 a
3 b
3 c

ファイルの内容をコマンドの引数に渡す

ファイルの内容を1行ずつコマンドの引数に渡してコマンドを実行する例。

parallel -a hosts.txt your_command

実行されるコマンドを確認する方法

コマンドを実行するときに、どのように展開されて、何がどう実行されるのか、確認したい場合には、 --dry-run オプションを使うことができます。 スクリプトを開発しているときに、想定したコマンドに展開されるか確認できます。

$ seq 3 | parallel --dry-run echo
echo 1
echo 2
echo 3

関連項目




スポンサーリンク