2009-02-24 13 views

Respuesta

10

utilizaría probablemente AnyEvent, tal como esto:

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

El enlace a AnyEvent :: HTTP es http://search.cpan.org/~mlehmann/AnyEvent-HTTP/. – gpojd

3

que utilizan LWP::Parallel::UserAgent por algo similar. Un ejemplo de la vaina:

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 falla sus pruebas en este momento, sin embargo. –

+0

Creo que ya no se mantiene. Moví todo mi trabajo para utilizar AnyEvent :: HTTP. – gpojd

3

HTTP::Async es bastante rápido y muy fácil de código.

+1

Fundamentalmente, devuelve los objetos HTTP :: Response, por lo que puede ubicarlo casi sin problemas en lugar de LWP. –

4

En realidad, AnyEvent::Curl::Multi es una biblioteca sin bloqueo construida sobre libcurl. Muy rápido y toneladas de concurrencia disponibles. Mucho más poderoso que AnyEvent :: HTTP, IMO.

Cuestiones relacionadas