2016-09-08 13 views
0

私は別の持っている二つのプログラムを持っているが提案し、次のようにそれらが呼び出されます。GNU Parallelで異なる入力で2つのコマンドを実行するには?

私はGNU平行して、次のコマンドを持って、これらのアプリケーションを実行する
./FolderCounter <PATH TO FOLDER> traceX 
./VideoCounter <PATH TO VIDEO> traceY 

parallel ./FolderCounter {} trace3 ::: $(cat PatinN_files.txt) &> data_output/Result_PatinN_files.txt 
parallel ./FolderCounter {} trace5 ::: $(cat PatinS_files.txt) &> data_output/Result_PatinS_files.txt 
parallel ./VideoCounter {} trace3 ::: $(cat PatinN_videos.txt) &> data_output/Result_PatinN_video.txt 
parallel ./VideoCounter {} trace5 ::: $(cat PatinS_videos.txt) &> data_output/Result_PatinS_video.txt 

私の目標は、これらの4本のラインを組み合わせています単一のGNUパラレルコマンドに変換することで、並列ジョブの数をより適切に管理し、利用可能なプロセッサがあるとすぐに次のバッチファイルを開始することができます。

どうすればいいですか?

答えて

1

まず:しないでください。

parallel ... ::: $(cat foo) 

実行します。ほとんどのケースで

parallel ... :::: foo 

それがスペースを含む行が含まれている場合、最初に問題を引き起こす可能性があり、一方、これはあなたがやりたいだろう。

PatinN_files.txtにはPatinN_videos.txtと同じ行数があるものとします。

通常、私は2つのランを行うだろう:TRACE3・ランとtrace5実行を:

また
parallel ./FolderCounter {1} trace3 ";" ./VideoCounter {2} trace3 ::::+ PatinN_files.txt PatinN_videos.txt &> data_output/Result_PatinN.txt 
parallel ./FolderCounter {1} trace5 ";" ./VideoCounter {2} trace5 ::::+ PatinS_files.txt PatinS_videos.txt &> data_output/Result_PatinS.txt 

あなたは、単にこれはしていません(最初に実行し、それらを実行するために、すべてのコマンドを生成するために、GNUパラレルを使用することができます同じ行数)を持つようにTXT-ファイルが必要です。

) | parallel --tag &> data_output/Result.txt 

(
parallel --dry-run ./FolderCounter {} trace3 :::: PatinN_files.txt 
parallel --dry-run ./FolderCounter {} trace5 :::: PatinS_files.txt 
parallel --dry-run ./VideoCounter {} trace3 :::: PatinN_videos.txt 
parallel --dry-run ./VideoCounter {} trace5 :::: PatinS_videos.txt 
) | parallel &> data_output/Result.txt 

が入力追跡するにはどのような出力、使用を生成し、

4つの異なるファイルにログ出力を取得するのは少し難しくなります。それが本当に必要なのであれば、それはできますが、上記と同じくらいエレガントではありません。

あなたは、単に予備のCPUのアイドル状態がある場合は、ジョブを実行したい場合は、あなたが--load 100%を使用することができますが:

parallel --load 100% ./FolderCounter {} trace3 ::: $(cat PatinN_files.txt) &> data_output/Result_PatinN_files.txt & 
parallel --load 100% ./FolderCounter {} trace5 ::: $(cat PatinS_files.txt) &> data_output/Result_PatinS_files.txt & 
parallel --load 100% ./VideoCounter {} trace3 ::: $(cat PatinN_videos.txt) &> data_output/Result_PatinN_video.txt & 
parallel --load 100% ./VideoCounter {} trace5 ::: $(cat PatinS_videos.txt) &> data_output/Result_PatinS_video.txt & 
wait 

インスタント負荷がCPUの数よりも少ない場合には、ジョブを開始します。

関連する問題