2012-01-18 64 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