繁体   English   中英

Python周期性定时器中断

[英]Python periodic timer interrupt

(如何)我可以在 Python 中激活周期性定时器中断吗? 例如有一个主循环和一个定时器中断,应该定期触发:

def handler():
    # do interrupt stuff

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

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

我已经尝试了在 Python执行周期性操作中的示例,但它们要么阻塞main()的执行,要么开始产生新线程。

如果不是进程,任何解决方案都会阻塞 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()

这个解决方案不会随着时间的推移而漂移

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM