ブロッキング 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では、最初に望んでいた移植性が得られません)。ただし、上記のコードが機能しない理由はまだ疑問に思っています。