1
私は、複数のスレッドと各スレッドが時間を消費するperlアプリケーションを作成しています。これは私がこれまでPerlどのように他のスレッドを継続しながらperlで '不正な'スレッドを削除する
use strict;
use warnings;
use threads;
my @file_list = ("file1", "file2", "file3");
my @jobs;
my @failed_jobs;
my $timeout = 10; #10 seconds timeout
foreach my $s (@file_list){
push @jobs, threads->create(sub{
#time consuming task
})
}
$_->join for @jobs;
問題は時間のかかる作業が時々動けなく(または実行に時間の$タイムアウト秒以上かかる)ことである持っているものです。だから、私はファイルの名前を取得し、それを@failed_jobsにプッシュし、そのスレッドを終了したいと考えています。しかし、私は他のスレッドを続行したい。すべてのスレッドが終了または完了すると、終了します。
これを達成するために上記のコードを変更する方法を教えてもらえますか?
おかげ
同時にすべてのスレッドを開始している場合は、同時にすべてのタイムアウトが発生するため、他のスレッドがタイムアウトしている間は、実際には発生しません。 – hobbs
あなたは[The Fine Manual](http://perldoc.perl.org/threads.html)に時間をかけましたか? Perlのインタプリタスレッドを使用することはお勧めできませんので、そのページとそのすべての注意点に精通している必要があります。スレッドシグナリングに関するセクションは、あなたの質問にとって特に重要です。優秀な既存の文書を複製することはできません。 –
@ジムギャリソン、このマニュアルはこの問題については言及していません。仮想信号を送信することはできますが、プロセスがXSライブラリの正規表現でスタックしている場合は役に立ちません。 //軽いスレッドが必要な場合に限って、Perlスレッドは推奨されません。そのテキストは誤解を招き、パッチを必要としています。前段落を補強していると思われます。 – ikegami