Parallel::ForkManagerを使用していくつかの子プロセスを制御しようとしています。同時に実行するプロセスの数を10に制限したいと思います。合計で20を実行する必要があります。
オブジェクト宣言の最初の行でプロセス制限を10に設定できることはわかっていますが、$ pmオブジェクトを使用して、別のことを行う子プロセスを実行しています(現在の関数はメモリを大量に消費するため、制限する必要があります) )。
私が現在持っているコードは機能せず、finish呼び出しで実行されることはないため、残りの10人の子はフォークされません。なぜそうなるのかわかりません。子供が終了時に終了コードを呼び出してカウントを減らすと思っていたのですが、「if」ステートメントはこれを止めているようです。誰かがこれが事実である理由を説明できますか?
助けてくれてありがとう!
# Parallel declarations
my $pm = Parallel::ForkManager->new(30);
$pm->run_on_finish(sub {
my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $data_str_ref) = @_;
--$active_jobs;
})
my $total_jobs = 0;
my $active_jobs = 0;
while( $total_jobs < 20) {
sleep 300 and next if $active_jobs > 10;
my $pid = $pm->start and ++$active_p1_jobs and ++$total_p1_jobs and next;
my $return = module::function(%args);
$pm->finish(0, { index => $total_jobs, return => $return });
}
print STDERR "Submitted all jobs, now waiting for children to exit.\n";
$pm->wait_all_children();