Gabriel Genellina wrote:
En Fri, 30 May 2008 22:50:13 -0300, Robert Dailey <[EMAIL PROTECTED]> 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()

    Actually, to do this right, it's necessary to account for the time used by
"action".  The code above will run no sooner than the time "every" after
the COMPLETION of action.

    I've done this sort of thing under QNX, the real-time operating system,
which has better timing primitives, and seen the action executed within
a few microseconds of the correct time, every time.  But that was in C++.

    If you're trying to do hard real time in Python on Linux or Windows,
don't expect reliable timing.  Remember, Python isn't really preemptive,
because of the global interpreter lock and the lack of thread priorities.

                                        John Nagle
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to