in reply to use LWP::Simple slows script down.
LWP::Simple does blocking requests. The big problem you're facing isn't that some requests take longer than others. It is that whatever length of time they take, your script has to sit and wait before it can proceed to the next request. Since you have no control over how long an individual request can take, you might want to restructure your program around an event loop so that it doesn't have to wait before issuing the next request.
Here is an example of using Mojo::UserAgent and Mojo::IOLoop for non-blocking requests.
use Mojo::UserAgent; use Mojo::IOLoop; my $ua = Mojo::UserAgent->new; # --- Worst nodes -------------------! # --- Best nodes --------------! | # --- Last hour CB -----! | | # \/ \/ \/ foreach my $node ( qw( 596792 9066 9488 ) ) { $ua->get( "http://perlmonks.org/?node_id=$node" => sub { my( $ua, $mojo ) = @_; print $mojo->req->url, " => <<<\n", $mojo->res->text, "\n>>>\n\n\n"; } ); } Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
The point to the exercise is that however many requests you make (within the limits of memory), the IO loop just handles them with the callback you provide as responses come in. Meanwhile, you can continue issuing requests or processing the responses. It's a parallel process, rather than serial.
Dave
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: use LWP::Simple slows script down.
by Jesse Smith (Acolyte) on Feb 11, 2014 at 18:14 UTC | |
by davido (Cardinal) on Feb 11, 2014 at 19:07 UTC |