Perl如何在继续其他线程的同时杀死perl中的'rogue'线程

时间:2016-08-13 01:27:37

标签: multithreading 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;

问题在于,耗时的任务有时可能会卡住(或者运行时间超过$ timeout)。所以,当发生这种情况时,我想获取文件的名称并将其推送到@failed_jobs,然后杀死该线程。但是,我想继续其他线程。当所有线程被杀死或完成时,我想退出。

有人可以告诉我如何修改上面的代码来实现这个目标吗?

由于

1 个答案:

答案 0 :(得分:1)

如果你想要杀死任务的能力,你不需要线程但是需要处理。