Parallel::ForkManager を使用してフォークにある種のタイムアウト (時間制限) を実装することは可能ですか?
基本的な Parallel::ForkManager スクリプトは次のようになります
use Parallel::ForkManager;
my $pm = Parallel::ForkManager->new( 10 );
for ( 1 .. 1000 ) {
$pm->start and next;
# some job for fork
$pm->finish;
}
$pm->wait_all_children();
「#フォークのための仕事」の時間を制限したいと思います。たとえば、90 秒で終了しない場合。次に、それ(フォーク)を強制終了/終了する必要があります。これを使用することを考えましたが、Parallel::ForkManager で使用する方法がわかりません。
編集
Hobbsさん、池上さん、ありがとうございました。あなたの提案は両方ともうまくいきました.....しかし、私の実際のスクリプトではなく、この基本的な例でのみ:(.
これらのフォークは永遠にそこにあり、-正直に言うと-理由はわかりません。何も変更しませんでした (ただし、多くのことは外部変数に依存します)。すべてのフォークは Web サイトからページをダウンロードし、それを解析し、結果をファイルに保存する必要があります。フォークごとに 30 秒以上かかることはありません。タイムアウトは 180 秒に設定されていますぶら下がっているフォークは完全にランダムなので、問題を追跡するのは非常に困難です. そのため、一時的で簡単な解決策を思いついたのです - タイムアウト & キル.
私のコードでタイムアウトの方法を無効にする (中断する) 可能性があるのは何ですか? alarm()
私のコードには他に何もありません。
編集2
フォークの 1 つが 1 時間 38 分ぶら下がっていて、「タイムアウト PID」を返しましdie()
たalarm()
。したがって、タイムアウトは機能します...しかし、約1時間36,5分遅れます;)。あなたはなにか考えはありますか?