我當前的python腳本監聽網絡,並且如果有某個事件,事件將被保存到列表中。在整個執行時間檢查stdin上的用戶輸入
事情是,用戶也會顯示事件並對事件做出反應,但不需要立即執行,因此他會顯示消息並做出一些選擇,但他也可以作出反應(按是或否)在稍後的點。有了他的選擇,他還提供了信息,可以查看他意味着什麼事件(如:是事件123)。
我的問題是:在整個執行過程中如何等待他的輸入?我的方法,到目前爲止是在一個新的線程while循環(while(1)
)select.select()
,所以剩下的執行過程中不堵塞:
while(1):
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
result = parse_userinput()
react_to_event(result)
不過:在CPU運行非常非常高的,因爲無限循環的在不斷檢查輸入的線程中。
在Python腳本的整個執行時間內,有沒有更好的方法來檢查stdin
上的用戶輸入?
添加一個長超時會有幫助。試試'select.select([sys.stdin],[],[],10)[0]'。 – matsjoyce 2014-10-20 16:29:41
我同意@matsjoyce。如果你的循環只是在等待來自'sys.stdin'的輸入而沒有其他任何東西,那就讓'select'超時。它將釋放您的CPU,而不會對其他任何事物產生不利影響。 – dano 2014-10-20 16:39:23