perl threading problem
Posted
by Alice Wozownik
on Stack Overflow
See other posts from Stack Overflow
or by Alice Wozownik
Published on 2010-06-13T21:44:01Z
Indexed on
2010/06/13
21:52 UTC
Read the original article
Hit count: 590
perl
|multithreading
I'm writing a multithreaded website uptime checker in perl, and here is the basic code so far (includes only threading part):
!/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 = )
{
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--;
}
It gives an error after a while: Can't call method "detach" on an undefined value at C:\perl\webchecker.pl line 28, line 245.
What causes this error? I know it is at detach, but what am I doing wrong in my code? Windows shows lots of free memory, so it should not be the computer running out of memory, this error occurs even if I set $maxthreads as low as 10 or possibly even lower.
© Stack Overflow or respective owner