2012-01-18 19 views
0

我试图在使用标准读取评估打印循环的程序中实现警报。如何使计时器中断等待过程?

代码的一个例子是这样的:

while True: 
    input = get_input() # A function that waits for input and 
         # returns the input once it is obtained 
    set_alarm(interpret(input)) # A function that sets the alarm 

Set_alarm使用threading.Timer类。但是,这有一个问题。计时器按时激活,但当get_input()等待输入时,计时器将等待该过程完成,然后生成所需的输出。

定时器的回调函数是否有办法中断等待函数并在激活后立即产生输出?

谢谢!

回答

0

CPython checks for signals个人纯Python步骤之间。 get_input()可能拥有全局解释器锁定,并且信号处理将延迟到get_input返回。

解决方案是使用非阻塞调用以尊重超时的方式请求用户输入。根据您的平台,您可以使用kbhit或选择(使用stdin)来获取用户输入。

+0

好的,谢谢!但khbit只适用于按键输入,对吧?如果get_input()获得另一种形式(如语音)的输入,该怎么办? – Jian 2012-01-18 18:24:27

+0

@Jian:那么你需要找到某种非阻塞的方式来确定是否有任何等待或已经处理的语音。 – martineau 2012-12-17 12:19:42