Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading Perl如何杀死';流氓';在继续其他线程的同时使用perl中的线程_Multithreading_Perl - Fatal编程技术网

Multithreading Perl如何杀死';流氓';在继续其他线程的同时使用perl中的线程

Multithreading Perl如何杀死';流氓';在继续其他线程的同时使用perl中的线程,multithreading,perl,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

我正在创建一个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,然后杀死该线程。但是,我想继续使用其他线程。当所有线程被终止或完成时,我想退出

有人能告诉我如何修改我的上述代码来实现这一点吗


谢谢

如果您想要终止任务,您不需要线程,而是进程。

如果您同时启动所有线程,那么它们将同时超时,因此在其他线程超时的情况下继续等待一段时间的情况实际上不会发生:)您是否花时间停止?鉴于不鼓励使用Perl的解释器线程,您应该非常熟悉该页面及其所有注意事项。关于线程信号的部分对于您的问题特别重要。由于我们不能也不应该复制优秀的现有文档,所以投票结束时被认为“过于宽泛”。@Jim Garrison,手册对这个问题没有提及。您可以发送一个虚拟信号,但如果进程在XS库中的正则表达式匹配中卡住,则这将无济于事只有在需要轻线程的情况下才不鼓励使用Perl线程。该文本具有误导性,需要修补。它应该是加强上一段,仅此而已。