GNU/Linux >> Linux の 問題 >  >> Linux

シェルスクリプトの並列実行

GNU parallel のドキュメントには、シェルから並列にジョブを実行できるプログラムの完全なリストがあり、それらの比較も含まれています。そこには非常に多くの解決策があります。もう 1 つの良いニュースは、ジョブのスケジューリングが非常に効率的であるため、すべてのコア/プロセッサが常にビジー状態に保たれることです。


並行して実行するには、シェル コマンドの最後に「&」を使用してバックグラウンドで実行し、次に wait を使用します。 デフォルトでは (つまり、引数なしで)、すべてのバックグラウンド プロセスが終了するまで待機します。したがって、10 を並行して開始し、待ってから、別の 10 を実行します。これは、2 つのネストされたループで簡単に実行できます。


これを行うもう 1 つの非常に便利な方法は、gnu parallel を使用することです。これは、まだ持っていない場合はインストールする価値があります。これは、タスクに必ずしも同じ時間がかかるとは限らない場合に非常に役立ちます。

seq 1000 | parallel -j 8 --workdir $PWD ./myrun {}

./myrun 1 を起動します 、 ./myrun 2 など、一度に 8 つのジョブが実行されていることを確認します。 PBS ジョブなどで一度に複数のノードで実行したい場合は、ノードのリストを取得することもできます。私たちのシステムでそれを行う方法についてのユーザーへの指示はここにあります。

以下を追加して更新: moreutils パッケージに含まれる同じ名前のより制限されたユーティリティではなく、gnu-parallel を使用していることを確認する必要があります (この 2 つの相違点については、ここで説明します)。


bash サブシェルを確認してください。これらは、スクリプトの一部を並行して実行するために使用できます。

私はこれをテストしていませんが、これが出発点になる可能性があります:

#!/bin/bash
for i in $(seq 1 1000)
do
   ( Generating random numbers here , sorting  and outputting to file$i.txt ) &
   if (( $i % 10 == 0 )); then wait; fi # Limit to 10 concurrent subshells.
done
wait

Linux
  1. シェルスクリプトでタイムアウトしますか?

  2. どのシェルで実行していますか?

  3. バックグラウンドでシェルスクリプトを実行する方法は?

  1. シェルからPythonスクリプトを実行する方法

  2. * nixでログイン時にスクリプトを実行するにはどうすればよいですか?

  3. 実行中にシェルスクリプトを編集する

  1. シェルスクリプトを常にルートとして実行する方法は?

  2. 起動時にシェルスクリプトを実行する方法

  3. シェル スクリプトの実行時に root としてログインするようにユーザーに要求する