Continuous Timer

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Mon Jun 2 22:11:56 EDT 2008


En Fri, 30 May 2008 22:50:13 -0300, Robert Dailey <rcdailey at gmail.com>  
escribió:

> Reading through the Python 2.5 docs, I'm seeing a Timer class in the
> threading module, however I cannot find a timer object that will
> continuously call a function of my choice every XXXX amount of  
> milliseconds.
> For example, every 1000 milliseconds I want a function named Foo to be
> called. This would continue to happen until I terminate the timer in my  
> main
> thread. Thanks for the help.

Use an Event object; its wait() will provide the sleep time, and when it  
is set() the thread knows it has to exit.

import threading
import time

def repeat(event, every, action):
     while True:
         event.wait(every)
         if event.isSet():
             break
         action()

def foo():
     print "I'm bored to death..."

print "creating event and thread"
ev = threading.Event()
t1 = threading.Thread(target=repeat, args=(ev, 1.0, foo))
print "starting thread"
t1.start()
print "waiting for 10 seconds in main thread"
time.sleep(10)
print "setting event"
ev.set()
print "waiting for thread to finish"
t1.join()
print "quit"

-- 
Gabriel Genellina




More information about the Python-list mailing list