tetsunosukeのnotebook

tetsunosukeのメモです

Forkが気になりつつthread

id:ablaboさんがParallel::ForkManager使ってなんかやってるんで、自分はthreads使ってみた。*1

いろいろあってオリジナルとおなじじゃなかったりちょいダサだったりしますが気にしないで。

use strict;
use threads;
use threads::shared;
use Data::Dumper;
use LWP::UserAgent;

my @global_status;
share(@global_status); #これポイント

my @urls = qw(http://blog.livedoor.jp/dankogai/ http://d.hatena.ne.jp/ablabo/ http://d.hatena.ne.jp/onishi/);
my @threads;

my $id = 0;
for my $url (@urls) {
    $threads[$id] = threads->new(\&main, $id,$url);
    $id++;
}

foreach my $t(@threads){
    $t->join;
}

print Dumper(@global_status);


sub main {
    my ($id, $url) = @_;
    print "start one of the threads($id)\n";
    my $ua = LWP::UserAgent->new();
    my $ans = $ua->head($url);
    push(@global_status,$ans->as_string);
    
    print "thread #$id finished\n";
}

*1:で、LWP::Parallel::UserAgentじゃ、ダメなのか?と。