Python中的实时中断

时间:2014-04-19 12:54:41

标签: python performance python-2.7 time interrupt

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

到目前为止我所做的是以下内容: 在while循环的每次迭代中,我正在检查当我使用

到达代码中的那个点时经过了多长时间
time.clock()

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

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

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

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

2 个答案:

答案 0 :(得分:5)

如果要处理单个事件,那么最简单的方法是使用signal的{​​{1}}框架。

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

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

答案 1 :(得分:0)

如果没有特殊的硬件/软件支持,您将无法获得real-time。在大多数情况下,您不需要它(do you need to control giant robots?)。

如何按已知的秒数延迟多个函数调用取决于您的需要,例如,如果运行函数所需的时间与调用之间的延迟相比可忽略不计,那么您可以run all functions in a single thread

#!/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")

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