gpt4 book ai didi

multithreading - 如何杀死正在运行的线程并使 perl 应用程序保持事件状态?

转载 作者:行者123 更新时间:2023-12-04 06:49:42 24 4
gpt4 key购买 nike

perl 脚本中为 threads 使用 async 我需要做一些并行功能,但是我必须为此设置修复时间限制线程(例如最多 5 秒)。如果它们运行时间更长,我需要杀死所有正在运行的线程,但仍然保持程序事件。我的代码是:

use threads ( 'yield',
'exit' => 'threads_only',
'stack_size' => 2*16384 );
use threads::shared;
use Time::HiRes qw/sleep/;

...

$start = [Time::HiRes::gettimeofday()];
my $running :shared = 0;
foreach ($entry) {
async(
sub {
local $SIG{KILL} = sub { threads->exit };
{ lock $running; ++$running };

...

{ lock $running; --$running };
},
$_)->detach;
}

while ($running) {
sleep 0.005;
last if (Time::HiRes::tv_interval($start) > 5);
}

if ($running) {
my @running = threads->list(threads::running);
foreach (@running) {
$_->kill('KILL')->detach;
}
}

print "I am still alive\n";

有没有更好的方法来杀死正在运行的线程并保持应用程序事件?

最佳答案

不要那样做。对线程进行编码,使它们只做您想要完成的工作,并在没有工作可做时自行终止。不要试图从外面进去杀死他们。这永远不会奏效。

关于multithreading - 如何杀死正在运行的线程并使 perl 应用程序保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com