2009-02-24 11 views

答えて

10

私はおそらく、おそらくこのように、AnyEventを使用します。私は似たようなのためにLWP::Parallel::UserAgentを使用

use AnyEvent; 
use AnyEvent::HTTP; 


sub get_feeds { 
    my @feeds = @_; 
    my $done = AnyEvent->condvar; 
    my %results; 
    $done->begin(sub { $done->send(\%results) }); 

    for my $feed (@feeds){ 
     $done->begin; 
     http_get $feed, sub { $results{$feed} = \@_; $done->end }; 
    } 

    $done->end; 
    return $done; 
} 

my $done = get_feeds(...); 
my $result = $done->recv; # block until all feeds are fetched 
+1

AnyEvent :: HTTPへのリンクはhttp://search.cpan.org/~mlehmann/AnyEvent-HTTP/です。 – gpojd

3

。 PODの例:

require LWP::Parallel::UserAgent; 
$ua = LWP::Parallel::UserAgent->new(); 
... 

$ua->redirect (0); # prevents automatic following of redirects 
$ua->max_hosts(5); # sets maximum number of locations accessed in parallel 
$ua->max_req (5); # sets maximum number of parallel requests per host 
... 
$ua->register ($request); # or 
$ua->register ($request, '/tmp/sss'); # or 
$ua->register ($request, \&callback, 4096); 
... 
$ua->wait ($timeout); 
... 
sub callback { my($data, $response, $protocol) = @_; .... } 
+0

LWP :: Parallelは現時点でテストに失敗します。 –

+0

私はそれがもはや維持されていないと思う。 AnyEvent :: HTTPを使用するようにすべての作業を移動しました。 – gpojd

3

HTTP::Async非常に高速でコード作成が簡単です。

+1

重大なことに、HTTP :: Responseオブジェクトを返すので、LWPの代わりにほとんど無痛にスロットに挿入できます。 –

4

実際には、AnyEvent::Curl::Multiは、libcurlの上に構築されたノンブロッキングライブラリです。非常に高速で同時利用可能なトン数。 AnyEvent :: HTTP、IMOよりもはるかに強力です。

関連する問題