Protože nevytváříte vlákna (a předpokládám, že je to záměrné a v některých případech moudré), musíte použít typ přerušení. Signály jsou typem přerušení na unixových systémech, které vám umožní vrátit se ke zpětnému volání během hovoru, který by mohl blokovat.
Tento příklad otevřeného souboru, který se nikdy nevrátí, je v souladu s tím, co chcete udělat. Je převzato z http://docs.python.org/library/signal.html#module-signal
Ale varování. Vzhledem k tomu, že Python používá Global Interpreter Lock k provádění manipulace se signálem OS, je vystaven určitým problémům se stabilitou. Tyto problémy by však měly být vzácné.
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