複数のスクリプトを並列に実行する方法

複数のスクリプトを並列に実行する方法

同じPerlスクリプトを連続して呼び出すbashスクリプトがあります。 bashスクリプトは結果全体を収集するために使用され、Perlスクリプトは特定の属性のシミュレーション結果を収集します。

Bashスクリプトは次のとおりです。

mkdir ./results/csv     && \
../perlscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv
../perlscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/RT.csv
../perlscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/DL.csv
../perlscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv

一度に1つずつPerlスクリプトを呼び出して結果を収集するのは本当に時間がかかります。私はbashスクリプトからPerlスクリプトのさまざまなバリエーションを並列に呼び出す方法を探しています。 Bashでこれを達成する方法はありますか?

明らかに、Perlスクリプトを呼び出すコマンドが何らかの方法で互いに依存することを望まない。 4つの別々のbash端末があり、それぞれがコマンドのいずれかを実行するのと同じように、すべて同じ時点で起動したいと思います。

類似: https://stackoverflow.com/questions/15644991/running-several-scripts-in-parallel-bash-script

ベストアンサー1

インストールした場合は、gnu parallel次のコマンドを使用してスクリプトを作成できます。

../perlscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv
../perlscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/RT.csv
../perlscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/DL.csv
../perlscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv

その後、並列に実行します。

mkdir ./results/csv && parallel :::: myscript.sh

または、コマンドを呼び出し、デフォルト{}で文字列を-に置き換えます。

mkdir ./results/csv && parallel ../perlscripts/v2csv.pl -v -F {} \
results/Heterogeneous*.vec '>' ./results/csv/{}.csv ::: reach roundTrip downlink clusters

次のコマンドが並列に実行されます。

../perlscripts/v2csv.pl -v -F reach results/Heterogeneous*.vec > ./results/csv/reach.csv
../perlscripts/v2csv.pl -v -F roundTrip results/Heterogeneous*.vec > ./results/csv/roundTrip.csv
../perlscripts/v2csv.pl -v -F downlink results/Heterogeneous*.vec > ./results/csv/downlink.csv
../perlscripts/v2csv.pl -v -F clusters results/Heterogeneous*.vec > ./results/csv/clusters.csv

おすすめ記事