我已经读过这种技术来超时阻止IO操作,问题是它似乎不起作用。例如:
import thread, threading
def read_timeout(prompt, timeout=10.0):
timer = threading.Timer(timeout, thread.interrupt_main)
s = ''
timer.start()
try:
s = raw_input(prompt)
except KeyboardInterrupt:
print 'operation timed out.'
timer.cancel()
return s
s = read_timeout('enter input: ')
if s:
print 'you entered: %s' % s
这将不会在raw_input()
返回之前中断主线程。
任何帮助表示赞赏。
使用os.kill(os.getpid(), signal.SIGINT)
代替thread.interrupt_main()
似乎有效(至少在Linux上,它不能给我最初想要的可移植性)。但是,我仍然想知道为什么上面的代码不起作用。
答案 0 :(得分:0)
在Unix机器上,有一种方法可以做你想做的事情。看看这篇文章: raw_input and timeout
只需删除第5行末尾的逗号,否则在程序终止之前不会显示提示。
在同一页面上还有适用于Windows操作系统的解决方案,但我还没有对其进行测试,以确定它是否正常工作。