python - Python周期性定时器中断
问题描述
(如何)我可以在 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()
这个解决方案不会随着时间的推移而漂移
推荐阅读
- batch-file - 获取目录路径 2 级别并更改格式(批处理文件)
- django - 如何在中间件中知道输入了哪种类型的 url?
- java - RecyclerView 没有激活,我想知道为什么
- css - 是否有将 div 设置为按钮的有效用例?
- python - CatBoost 是否支持成本函数的 L1 正则化?
- elasticsearch - 关于 elasticSearch 超时的困惑
- html - IMGKIT 无法加载 css 和图像
- matlab - 如何在 Matlab 中更改曲面图的颜色
- vue.js - 变量数据的奇怪行为
- c# - ASP.NET 拒绝 OpenHtmlToPdf 访问