Alexander
Alexander

Reputation: 971

Python periodic timer interrupt

(How) can I activate a periodic timer interrupt in Python? For example there is a main loop and a timer interrupt, which should be triggered periodically:

def handler():
    # do interrupt stuff

def main():
    init_timer_interrupt(<period>, <handler>);
    while True:
        # do cyclic stuff

if __name__ == "__main__":
    main();

I have tried the examples found at Executing periodic actions in Python, but they are all either blocking the execution of main(), or start spawning new threads.

Upvotes: 2

Views: 15080

Answers (1)

R&#233;mi Baudoux
R&#233;mi Baudoux

Reputation: 559

Any solution will either block the main(), or spawn new threads if not a process.

The most commonly used solution is:

threading.Timer( t, function).start()

It can be used recursively, one simple application is:

import threading
import time

class Counter():
    def __init__(self, increment):
        self.next_t = time.time()
        self.i=0
        self.done=False
        self.increment = increment
        self._run()

    def _run(self):
        print("hello ", self.i)
        self.next_t+=self.increment
        self.i+=1
        if not self.done:
            threading.Timer( self.next_t - time.time(), self._run).start()
    
    def stop(self):
        self.done=True

a=Counter(increment = 1)
time.sleep(5)
a.stop()

this solution will not drift over the time

Upvotes: 4

Related Questions