繁体   English   中英

Python中的实时中断

[英]Real-time interrupts in Python

我有一个运行无限循环的Python 2.7程序,我想要合并一个定时器中断。 我的目的是在循环中的某个点设置一个计时器,当经过5秒后,我希望代码分支到while循环的特定部分。

到目前为止我一直在做的是:在while循环的每次迭代中,我正在检查当我使用代码中的那个点时经过了多长时间

time.clock()

如果差异超过5,我运行我想要运行的代码块

然而,在我评估时间之前,这种方式可能会持续7秒,但是它会超过5秒,但是我希望在5秒钟后完全通过

此外,我需要这个工作超过1个计数器(可能高达100)但我不希望中断相互中断。 使用Timer也不起作用。

我知道这可以在程序集中使用定时器中断来完成,但我怎么能在python中做到这一点?

如果要处理单个事件,那么最简单的方法是使用signal框架,它是Python标准模块

但是,如果我们需要一个完全成熟的调度程序,那么我们必须求助于另一个模块: sched 是指向官方文档的指针。 但请注意,在多线程环境中, sched 在线程安全方面存在局限性

另一个选项是Advanced Python Scheduler ,它不是标准发行版的一部分。

没有特殊的硬件/软件支持,您无法实时获得。 在大多数情况下不需要它( 你需要控制巨型机器人吗? )。

如何以已知的秒数延迟多个函数调用取决于您的需要,例如,如果运行函数所花费的时间与调用之间的延迟相比可以忽略不计,那么您可以在单个线程中运行所有函数

#!/usr/bin/env python
from __future__ import print_function
from Tkinter import Tk

root = Tk()
root.withdraw() # don't show the GUI window
root.after(1000, print, 'foo') # print foo in a second
root.after(0, print, 'bar') # print bar in a jiffy
root.after(2000, root.destroy) # exit mainloop in 2 seconds
root.mainloop()
print("done")

它实现了你的“我不希望中断相互中断”,因为下一个回调在前一个回调完成之前不会被调用。

暂无
暂无

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

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