我用Perl语言编写一个多线程的网站的正常运行检查,和这里的基本代码到目前为止(仅包括螺纹部):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--;
}
它一段时间后,给出了一个错误:
不能调用位于C未定义值的方法 “分离”:\ Perl的\ webchecker.pl线28,线245
是什么原因导致这个错误?我知道这是在分离,但我在代码中做错了什么? Windows显示大量可用内存,因此它不应该是计算机内存不足,即使将$ maxthreads设置为10或甚至更低,也会发生此错误。
对不起,但本网站转换#!/ usr/bin/perl to!/ usr/bin/perl(删除第一个字符)请忽略 – 2010-06-13 21:45:24
除非这是一个线程实验,否则考虑Parallel :: ForkManager或Thread :: Queue 。 – Schwern 2010-06-13 23:39:08