2016-11-21 3 views
6

ロット(テラバイト)の出力を生成してstdoutに送信するプログラムがあります。テキストを分割して並列に処理する

出力を分割し、別のプログラムのインスタンスの束と並行して処理したいと思います。線がそのまま残っている限り、どのような方法でも配布できます。

パラレルは、この操作を行うことができますが、それは回線の固定数をとり、この後にフィルタ処理をrestartes:

./relgen | parallel -l 100000 -j 32 --spreadstdin ./filter 

は、実行中のプロセスの一定の数を維持し、それらの間でデータを分散する方法はありますか?

答えて

2

-lは、パフォーマンスにはあまり適していません。可能であれば、代わりに​​を使用してください。

データには、--roundrobinを使用してラウンドロビンを配信できます。

./relgen | parallel --block 3M --round-robin -j 32 --pipe ./filter 
+0

このコマンドを使用すると、フィルタプロセスは生成されますが、一度に1つだけ実行されます。他は入力を待っています。 – Craden

+0

それから、relgenの生成が遅すぎる:3Mを0.3Mに下げる –

+0

relgenは、32個のフィルタインスタンスをすべて実行するのに十分速く生成しています。 0.3Mと同じ動作です。 – Craden