Time delay function?

Ken ken at hotmail.com
Sun Oct 20 12:23:51 EDT 2002


"Alan Kennedy" <alanmk at hotmail.com> wrote in message
news:3DB293B4.AB2737DB at hotmail.com...
> Ken wrote:
>
> > Hi, is there a command in Python similar to javascript's
> > window.settimeout(), where you can set a few seconds delay before
> > executing a function?
>
> Ken,
>
> Javascript allows you to execute stuff "in the foreground" while your
> timer counts away "in the background". I presume you want to be
> executing other stuff in the interim, i.e. do you want the timeout stuff
> to happen in the "background"?

Hi, the purpose I think I will use is to wait for a output file to be
present at the system in order to read it.....because I will not know how
long the backend program takes to produce the result. I only consider this
method if the other suggested outf, inf = os.popen2("cat")  method
fails......

As for the below section...... thanks very much for the reference. I will
surely have a look at it to see if it fits my aim.

Thanks : -)



> If yes, there are a couple of different ways you could approach this.
>
> 1. If you're working on unix, then you can use the "alarm" method in the
> "signal" module. This will set an alarm to go off after a particular
> time. You also use the signal method in the same module to ensure that a
> particular function is executed when the alarm signal is raised. But
> this doesn't work on Windows. See an example at
>
> http://www.python.org/doc/2.0/lib/Signal_Example.html
>
> 2. If you want a cross platform solution, then you should use
> multithreading. You create a second thread of execution, make it wait
> for the desired period of time, then execute your function.
>
> Fortunately, this is such a common case that there is a convenience
> class provided in the standard library (from python 2.2 onwards) that
> achieves exactly this, without requiring too much getting your hands
> dirty in threading (if you're not comfortable with that kind of thing).
>
> The class is called "Timer", and is documented, with an example, here
>
> http://www.python.org/doc/2.2/lib/timer-objects.html
>
> If you cannot use python 2.2, here is some sample code that achieves the
> same thing in older versions of python
>
> import threading
> import time
>
> class myTimer(threading.Thread):
>
>     def __init__(self, timeout, func):
>         threading.Thread.__init__(self)
>         self.timeout = timeout
>         self.func = func
>
>     def run(self):
>         time.sleep(self.timeout)
>         self.func()
>
> # Now test it
>
> def sayHello():
>     print "Rip van Winkle awakes!"
>
> timer = myTimer(10, sayHello)
> timer.start()
> # Count to 11 seconds
> for sec in range(15):
>     print "waiting...... %d" % sec
>     time.sleep(1)
>
>
>
> regards,
>
> alan kennedy
> -----------------------------------------------------
> check http headers here: http://xhaus.com/headers
> email alan:              http://xhaus.com/mailto/alan





More information about the Python-list mailing list