Beefy Boxes and Bandwidth Generously Provided by pair Networks
laziness, impatience, and hubris
 
PerlMonks  

Re: How can I run a piece of code asyncronously in Perl?

by BrowserUk (Pope)
on Nov 02, 2012 at 17:59 UTC ( #1002018=note: print w/ replies, xml ) Need Help??


in reply to How can I run a piece of code asyncronously in Perl?

threads

use threads; async { `t1.pl "arg1" "arg2" "arg3"`; }->detach; print "DONE\n";

Note: It doesn't make much sense to use backticks if you do nothing with the returned output; but that's not the subject of the question.

And having the first script end immediately after starting the second doesn't make much sense in isolation either -- why not just run the second script directly. But I assume this is just a generic example to satisfy the "where's your code" crowd.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

RIP Neil Armstrong


Comment on Re: How can I run a piece of code asyncronously in Perl?
Download Code
Re^2: How can I run a piece of code asyncronously in Perl?
by Doctrin (Beadle) on Nov 02, 2012 at 19:43 UTC
    Thanks. I'm sure it would work, but, if t2.pl would execute, say, in 0.1 sec, and the code in t1.pl would execute in 2.0 sec - it won't work (( Thread would be terminated, I suppose (( I need t1.pl to run completely independently of t2.pl which calls it...
      t won't work... Thread would be terminated, I suppose.

      Why "suppose"? Did you try it?

      C:\test>perl -Mthreads -E"async{ qx{perl -E\"sleep 5; die q[Now I'm do +ne];\"} }->detach; select'','','',0.1; die 'I\'m done'" I'm done at -e line 1. C:\test>Now I'm done at -e line 1.

      So long as you give the thread chance to start the command running, it will complete even if the thread dies.

      Ie. "t1.pl runs completely independently of t2.pl".

      It's probably not how I would do it; but then 'it' -- as you've defined it so far -- is so completely pointless, I probably wouldn't do it at all.

      But if I did, on Windows I'd probably use system 1, 't1.pl arg1 arg2 arg3';


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

      RIP Neil Armstrong

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (3)
As of 2014-09-21 00:59 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    How do you remember the number of days in each month?











    Results (165 votes), past polls