Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: perl threads exiting abnormally

by Khen1950fx (Canon)
on Nov 18, 2012 at 17:06 UTC ( #1004441=note: print w/ replies, xml ) Need Help??


in reply to perl threads exiting abnormally

I'd recommend that you start out working with one thread, then two, three, etc. until you get a feel for threads. I couldn't replicate your error, but then I didn't use threads the same as you. Here's a simplified script to check the number of threads enqueued:

#!/usr/bin/perl -l BEGIN { $| = 1; $^W = 1; } use strict; use warnings; use threads; use Thread::Queue; use LWP::UserAgent; use constant THREADS => 3; my(@urls) = ( 'http://search.cpan.org', 'http://www.perl.org', 'http://www.cpan.org', ); my $workq = Thread::Queue->new; my $thr = threads->create( sub { while(defined(my $url = $workq->dequeue)) { do { my $ua = LWP::UserAgent->new; foreach my $url (@urls) { my $response = $ua->get($url); if ($response->is_success) { print $response->decoded_content; } else { die $response->status_line; } } }; } }); $workq->enqueue($urls[0], $urls[1], $urls[2]); my $num_working = $workq->pending(); print $num_working; $workq->end(); $thr->detach(); undef $thr;


Comment on Re: perl threads exiting abnormally
Download Code
Re^2: perl threads exiting abnormally
by Lotus1 (Chaplain) on Nov 23, 2012 at 15:21 UTC
    • Why did you put a 'do' block inside a while loop? The while loop is going to do the block inside it anyway.

    • $workq->end();
      I couldn't replicate your error.

      There is no end() method listed in the POD for Thread::Queue. Did you test this code? I got a 'Can't locate object method "end"...' warning for this line.

    • $workq->enqueue($urls[0], $urls[1], $urls[2]);

      Why not this? $workq->enqueue(@urls);

    • while(defined(my $url = $workq->dequeue)) { do { my $ua = LWP::UserAgent->new; foreach my $url (@urls) {
      You get $url from $workq then override it with each of the urls from @urls? Wouldn't this make each thread access every url?

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1004441]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (6)
As of 2014-12-20 07:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (95 votes), past polls