Greetings Wise monks,

I am trying to make 10 consecutive HTTP calls and then wait for all 10 calls to finish before sending the data. I have found the below simple code I can modify to suit me needs.

My question is (Once i remove the sleeps) does the below method make 10 calls concurrently at the same time and then return the data for all 10 children. Or will this method simply make 10 calls one at a time defeating the purpose handily.

I am new to threads and any help you could give would be greatly appreciated.

Thank you kindly,

Perl Fork example

Perl Fork example This examples fork 10 child processes. It will wait for all childs to finish before exiting. #!/usr/local/roadm/bin/perl use strict; use warnings; print "Starting main program\n"; my @childs; for ( my $count = 1; $count <= 10; $count++) { my $pid = fork(); if ($pid) { # parent #print "pid is $pid, parent $$\n"; push(@childs, $pid); } elsif ($pid == 0) { # child sub1($count); exit 0; } else { die "couldnt fork: $!\n"; } } foreach (@childs) { my $tmp = waitpid($_, 0); print "done with pid $tmp\n"; ### DONE WITH HTTP CHILD } print "End of main program\n"; ### RETURN DATA FOR ALL 10 CHILDREN sub sub1 { my $num = shift; print "started child process for $num\n"; ### Make my HTTP C +ALL HERE sleep $num; print "done with child process for $num\n"; ### Return Data f +or 1 HTTP CHILD return $num; } Output looks like: Starting main program started child process for 1 started child process for 2 started child process for 3 started child process for 4 started child process for 5 started child process for 6 started child process for 9 started child process for 10 started child process for 7 started child process for 8 done with child process for 1 done with pid 5584 done with child process for 2 done with pid 5585 done with child process for 3 done with pid 5586 done with child process for 4 done with pid 5587 done with child process for 5 done with pid 5588 done with child process for 6 done with pid 5589 done with child process for 7 done with pid 5590 done with child process for 8 done with pid 5591 done with child process for 9 done with pid 5593 done with child process for 10 done with pid 5594 End of main program Another Version of doing this without fork is below.:: ------------------------------------------------------ ---------------------------------------------------- Below you'll find an example of a multi-threaded Perl program as well + as a forked Perl program. Both seem to work fine. A disadvantage of threads is that Perl needs +to be compiled with threads support. Not all versions of Perl come with that by default. A Perl Thread example #!/usr/local/roadm/bin/perl # This is compiled with threading support use strict; use warnings; use threads; use threads::shared; print "Starting main program\n"; my @threads; for ( my $count = 1; $count <= 10; $count++) { my $t = threads->new(\&sub1, $count); push(@threads,$t); } foreach (@threads) { my $num = $_->join; print "done with $num\n"; } print "End of main program\n"; sub sub1 { my $num = shift; print "started thread $num\n"; sleep $num; print "done with thread $num\n"; return $num; } Will print: Starting main program started thread 1 started thread 2 started thread 3 started thread 4 started thread 5 started thread 6 started thread 7 started thread 8 started thread 9 started thread 10 done with thread 1 done with 1 done with thread 2 done with 2 done with thread 3 done with 3 done with thread 4 done with 4 done with thread 5 done with 5 done with thread 6 done with 6 done with thread 7 done with 7 done with thread 8 done with 8 done with thread 9 done with 9 done with thread 10 done with 10 End of main program

I had posted a lengthy Thank you for your response but it never posted for some reason. So im posting it again.

Thank you much that cleared it all up for me.

especially the stored internally untill join() part.


In reply to Perl Threads Question. by Monkomatic

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.