Xargsを使用して、次のような一連の入力パラメーターに対してコマンドを実行しています。
cat <someinput> | xargs -n 1 -P 5 <somecmd>
入力ファイルは本当に長く、実行に長い時間がかかります。したがって、コマンドプロンプトが表示されるのを待っています。完了した入力引数の数の進行状況バーを表示する方法はありますか?
「バー」を使用してみましたが、常に「無限」のスループットが得られました。 xargsはコマンドを実行する前に入力全体を読み取るようです。
GNU Parallelを使用している場合は、次のコマンドを実行できます。
cat <someinput> | parallel --bar -P 5 <somecmd>
GNU Parallelは、一般的なパラレライザーであり、同じマシン上で、またはsshにアクセスできる複数のマシン上で、ジョブを簡単に並列実行できます。
4つのCPUで実行する32の異なるジョブがある場合、並列化する簡単な方法は、各CPUで8つのジョブを実行することです。
代わりに、GNU Parallelは、プロセスが終了すると新しいプロセスを生成します-CPUをアクティブに保ち、時間を節約します。
インストール
個人用インストールでは、rootアクセスは必要ありません。これを行うと、10秒で完了します。
(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
他のインストールオプションについては http://git.savannah.gnu.org/cgit/parallel.git/tree/README を参照してください
詳細
その他の例を見る: http://www.gnu.org/software/parallel/man.html
紹介ビデオを見る: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
チュートリアルをご覧ください: http://www.gnu.org/software/parallel/parallel_tutorial.html
サポートを受けるには、メーリングリストにサインアップしてください: https://lists.gnu.org/mailman/listinfo/parallel
あなたはpvを使うことができます:
cat <someinput> | pv -p -s sizeof_someimput | xargs -n 1 -P 5 <somecmd>
これにより、someimputの読み取り値がどこにあるかがわかるので、someimputの処理がどこにあるかがおおよそわかります。
進行状況の一般的な指標だけを探している場合、最も簡単な方法は、実行するコマンドを実行する前にエコーすることです。
例:cat <someinput> | xargs -I{} sh -c 'echo {}; <somecmd>;'
-I{}
セット{}
現在処理中の文字列へ
sh -c
を使用すると、複数のコマンドを実行できます(注:すべてのコマンドが必要な後はセミコロン最後のコマンドを含む。