Поскольку вы не используете потоки (и я предполагаю, что это сделано намеренно, а в некоторых случаях целесообразно), вы должны использовать тип прерывания.Сигналы - это тип прерывания в системах Unix, позволяющий вам вернуться к обратному вызову во время вызова, который может заблокировать.
Этот пример открытия файла, который никогда не вернется, соответствует тому, что вы хотите сделать.Это взято из http://docs.python.org/library/signal.html#module-signal
Но предупреждение.Поскольку Python использует глобальную блокировку интерпретатора для обработки сигналов ОС, он подвержен некоторым проблемам со стабильностью.Эти проблемы обычно должны быть редкими.
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