Я читал об этой методике тайм-аута, блокирующего операции ввода-вывода, но проблема в том, что она не работает. например:
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 , что не дает мне той портативности, которую я изначально хотел). Однако мне все еще интересно, почему приведенный выше код не работает.