$ time perl threads_yours.pl
real 7m13.312s
user 2m1.484s
sys 10m8.982s
$ time perl threads_mine.pl
real 0m2.209s
user 0m6.028s
sys 0m0.604s
####
$ uniq -c outfile | head
2275 Thread 1
1 ThreaThread 2
454 Thread 2
1 TThread 3
909 Thread 3
1 ThThread 5
454 Thread 5
1 Td 1
1364 Thread 1
1 Thread 1hread 2
####
#!/usr/bin/perl
use strict;
use POE qw(Component::Client::HTTP);
use HTTP::Request;
my @names = qw/ zezima fred bill john jack /;
open my $fh, '>', 'outfile' or die $!;
sub start_req {
my $name = shift @names or return;
POE::Kernel->post(weeble => request => response =>
HTTP::Request->new(
GET => "http://rscript.org/lookup.php?type=track&time=62899200&user=$name&skill=all"
), $name
);
}
POE::Session->create(
inline_states => {
_start => sub {
POE::Component::Client::HTTP->spawn;
start_req for(1 .. 5);
},
response => sub {
my $name = $_[ARG0]->[1];
my $result = $_[ARG1]->[0]{_content};
if($result =~ m/gain:Overall:\d+:(\d+)/isg) {
print { $fh } "$name $1\n";
} elsif($result =~ m/(ERROR)/isg) {
print { $fh } "$name doesn't exist \n"
} else {
print { $fh } "$name 0\n";
}
start_req;
},
},
);
POE::Kernel->run;
close $fh;