我当前的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