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
関連項目
ツイート
スポンサーリンク