Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Running code a certain amount of time

by blazar (Canon)
on Nov 01, 2008 at 09:52 UTC ( [id://720837]=note: print w/replies, xml ) Need Help??


in reply to Running code a certain amount of time

I just want to be able to set the program to run for a couple of hours (if need be) and then stop.

(additional emphasis by me)

I personally believe that for such prolonged times a solution along the lines of that suggested by L~R is best suited. Playing with alarm as duly suggested by ccn is more important in short lived situations in which finer control over time is needed and/or you need to timeout "no matter what" e.g. when running external processes:

#!/usr/bin/perl use strict; use warnings; use 5.010; use File::Basename; my $pname; BEGIN { ($pname)=fileparse $0, qr/\.pl/i } my $TIME = 10; if (@ARGV) { # Working as a generic external program sleep +(my $time=shift); say "Slept $time seconds"; } else { # Example of timeout via alarm() my ($msg, $timeout) = ("died in SIG ALRM", int rand 2*$TIME); eval { local $SIG{ALRM} = sub {die $msg}; warn "[$pname] Trying to collect output from external program. +\n", "(Setting timeout to $timeout seconds.)\n"; alarm($timeout); chomp(my $output = qx/perl $0 $TIME/); say "The output got from external program is: `$output'"; alarm(0); }; if ($@ and $@ ~~ /\Q$msg/) { warn "[$pname] Timed out!\n"; } } __END__

Incidentally, it is worth reminding that for finer control over (not necessarily) short times a precious module would be Time::HiRes, which is in core.

--
If you can't understand the incipit, then please check the IPB Campaign.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (2)
As of 2024-04-26 00:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found