gpt4 book ai didi

perl - Perl线程问题

转载 作者:行者123 更新时间:2023-12-01 01:12:20 27 4
gpt4 key购买 nike

我在perl中编写了一个多线程网站正常运行时间检查器,这是到目前为止的基本代码(仅包括线程部分):

#!/usr/bin/perl

use LWP::UserAgent;
use Getopt::Std;
use threads;
use threads::shared;

my $maxthreads :shared = 50;
my $threads :shared = 0;

print "Website Uptime Checker\n";
my $infilename = $ARGV[0];
chomp($infilename);
open(INFILE, $infilename);
my $outfilename = $ARGV[1];
chomp($outfilename);
open(OUTFILE, ">" . $outfilename);
OUTFILE->autoflush(1);
while ($site = <INFILE>)
{
chomp($site);
while (1)
{
if ($threads < $maxthreads)
{
$threads++;
my $thr = threads->create(\&check_site, $site);
$thr->detach();
last;
}
else
{
sleep(1);
}
}
}
while ($threads > 0)
{
sleep(1);
}

sub check_site
{
$server = $_[0];
print "$server\n";
$threads--;
}

过一会儿出现错误:

Can't call method "detach" on an undefined value at C:\perl\webchecker.pl line 28, line 245.



是什么导致此错误?我知道它是在分离中,但是我在代码中做错了什么? Windows显示大量可用内存,因此它不应是计算机内存不足,即使我将$ maxthreads设置为10甚至更​​低,也会发生此错误。

最佳答案

特定的问题是thread->create无法创建线程,因此返回undef。如果您希望代码更健壮,则应在调用thr之前检查detach的值。

关于perl - Perl线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034048/

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