あなたはスレッド化していないので(そしてこれは意図的で、場合によっては賢明だと思います)、ある種の割り込みを使用する必要があります。シグナルはUnixシステムの一種の割り込みであり、ブロックする可能性のある呼び出し中にコールバックに戻ることができます。
決して返されないファイルを開くこの例は、あなたがやりたいことと一致しています。 http://docs.python.org/library/signal.html#module-signal
から取得しかし、警告。 Pythonはグローバルインタープリターロックを使用してOS信号処理を実行するため、安定性の問題が発生する可能性があります。ただし、これらの問題は通常はまれです。
import signal, os
def handler(signum, frame):
print 'Signal handler called with signal', signum
raise IOError("Couldn't open device!")
# Set the signal handler and a 5-second alarm
signal.signal(signal.SIGALRM, handler)
signal.alarm(5)
# This open() may hang indefinitely
fd = os.open('/dev/ttyS0', os.O_RDWR)
signal.alarm(0) # Disable the alarm