Ponieważ nie wątkujesz (i zakładam, że jest to celowe iw niektórych przypadkach mądre), musisz użyć typu przerwania. Sygnały są rodzajem przerwań w systemach Unix, które umożliwiają powrót do wywołania zwrotnego podczas połączenia, które może zostać zablokowane.
Ten przykład otwartego pliku, który nigdy nie wróci, jest zgodny z tym, co chcesz zrobić. Pochodzi z http://docs.python.org/library/signal.html#module-signal
Ale ostrzeżenie. Ponieważ Python używa Global Interpreter Lock do obsługi sygnałów systemu operacyjnego, jest narażony na pewne problemy ze stabilnością. Te problemy powinny być jednak rzadkością.
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