kshに実装された貧乏人のGNU Parallel?


8

私は、GNU Parallelの機能を使用して、コマンドとそれが並列に供給されるリストを実行し、すべての完了後にそれを吐き出すことができるようにしたいのですが、すべてのサーバーにGNU Parallelをインストールしたくありません。

または、おそらく並列バージョンxargsですか?

GNU Parallelが行うことのksh実装はありますか?この場合、すべての出力をパイプまたは格納できる限り、GNU Parallelのように順番に実行する必要はありません。一時ファイルの使用も避けたいです。


GNU Parallelは単一のperlスクリプトです。依存関係がほとんどないように設計された単一のperlスクリプトをインストールするよりも、kshスクリプトをインストールする方がよい理由を知りたいと思います。詳しく説明していただけますか?(開示:私はGNU Parallelの作者です)
Ole

回答:


6

複数のコアを持つマシンで並列化したい場合は、(GNU)を使用するだけで済みますxargs。例:

echo seq_[0-9][0-9].gz | xargs -n 1 -P 16 ./crunching

意味:各プロセスに対してstdinからの1つのトークンxargs./crunching使用するのと並行して、最大16プロセスを開始します。

splitxargsと組み合わせて使用することもできます。

または、ジョブ実行用の単純なMakefileを作成して呼び出しますmake -f mymf -j $CORES(このソリューションには一時ファイルが必要です)。

PS: GNUパラレルマニュアルには、xargsmakeなどの他のツールとの比較も含まれています。

(GNU Parallelの非常に初期のバージョンは、偶然にmake -jを使用して実装されました)。


「すべての出力をパイプまたは保存できる」ことが質問者にとって重要です。xargs並列に実行すると、出力が混合する可能性があるため、このことは悪名高く有名です。
Ole Tange 2011年

@maxschlepzig:私はあなたの答えに100%同意します。私は常にxargsを使用します。多くの人は、GNU xargsが並列処理できることを知らないだけです!
JMベッカー

0

parallel --embedGNU Parallelを、それを使用するのと同じシェルスクリプトに組み込んでいるものを見てください。

parallel --embed > new_script

次に、new_scriptを編集します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.