一連の配列ジョブを SGE に送信する Perl スクリプトがあります。時間を節約するためにすべてのジョブを並行して実行し、すべてのジョブが完了するまでスクリプトを待機させてから、すべての SGE 出力ファイルからの情報を統合して最終出力を生成する次の処理ステップに進みたいと考えています。
すべてのジョブをバックグラウンドに送信してから待機するために、Parallel::ForkManager とループを使用します。
$fork_manager = new Parallel::ForkManager(@as);
# @as: Max nb of processes to run simultaneously
for $a (@as) {
$fork_manager->start and next; # Starts the child process
system "qsub <qsub_options> ./script.plx";
$fork_manager->finish; # Terminates the child process
}
$fork_manager->wait_all_children;
<next processing step, local>
ただし、「待機」部分が機能するためには、qsub オプションに「-sync yes」を追加する必要がありました。しかし、これの「副作用」として、SGE は各配列ジョブの各タスクの終了コードを出力します。多くのジョブがあり、単一のタスクは軽いため、基本的に、これらすべての割り込みメッセージが原因でシェルが使用できなくなります。 qsub ジョブが実行されています。
これらのメッセージを取り除くにはどうすればよいですか? どちらかといえば、ジョブのqsubの終了コードをチェックすることに興味があります(次のステップの前にすべてがうまくいったことを確認できます)が、タスクごとに1つの終了コードではありません(とにかくオプション-eを介してタスクのエラーを記録します必要な場合に備えて)。