我正在创建一个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;
问题在于,耗时的任务有时可能会卡住(或者运行时间超过$ timeout)。所以,当发生这种情况时,我想获取文件的名称并将其推送到@failed_jobs,然后杀死该线程。但是,我想继续其他线程。当所有线程被杀死或完成时,我想退出。
有人可以告诉我如何修改上面的代码来实现这个目标吗?
由于
答案 0 :(得分:1)
如果你想要杀死任务的能力,你不需要线程但是需要处理。