Python периодическое прерывание по таймеру - PullRequest
0 голосов
/ 09 октября 2018

(Как) я могу активировать периодическое прерывание по таймеру в Python?Например, есть основной цикл и прерывание по таймеру, которые должны периодически запускаться:

def handler():
    # do interrupt stuff

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

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

Я пробовал примеры, найденные на Выполнение периодических действий в Python , но все онилибо блокировать выполнение main(), либо начать порождение новых потоков.

1 Ответ

0 голосов
/ 09 октября 2018

Любое решение будет либо блокировать main (), либо порождать новые потоки, если не процесс.

Наиболее часто используемое решение:

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

Может использоваться рекурсивно,одно простое приложение:

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()

это решение не будет дрейфовать со временем

...