2017-05-23 67 views
0

我做了一個程序,每次按某個組合鍵時都會啓動一個簡短腳本。 我使用的是線程利用pyHook以下方式:調查鍵盤事件的Python程序CPU使用率很高

def logic(): 
    global running 
    hm = HookManager() 
    hm.KeyDown = captureF 
    hm.HookKeyboard() 
    while(running): 
     pythoncom.PumpWaitingMessages() 
    return 

其中captureF是,如果按下,如果按下某個按鍵組合,然後,測試功能啓動腳本。

在主線程上,我正在運行一個包含選項和退出的窗口托盤GUI(按下退出鍵後,它將標誌running設置爲false,從而導致邏輯線程完成)。

我現在面臨的問題是,當程序啓動時(即使腳本沒有啓動時),CPU使用率一直很高,我猜測問題出在我測試鍵盤輸入的方式,但我我不知道如何以更有效的方式來做到這一點。

感謝您的幫助提前。

+0

你不能使用阻塞的'pythoncom.PumpMessages()'嗎?這意味着你不需要while循環 –

回答

1

的問題是,您的投票豬的CPU:PumpWaitingMessages檢查消息,並返回立即如果沒有消息(它是非阻塞)

您必須插入某種延遲。最簡單的方法是:

import time 
while(running): 
    pythoncom.PumpWaitingMessages() 
    time.sleep(0.01) 

1/100秒確保良好的反應性,併爲CPU提供呼吸空間。我會讓你調整價值。您設置的值越高,輪詢的反應就越少。

但是,如果你不需要任何控制你的循環,你可以使用阻塞pythoncom.PumpMessages()調用,沒有循環。