Parce que vous n'êtes pas en train de threader (et je suppose que c'est intentionnel et dans certains cas judicieux), vous devez utiliser un type d'interruption. Les signaux sont un type d'interruption sur les systèmes Unix pour vous permettre de revenir à un rappel lors d'un appel qui pourrait bloquer.
Cet exemple de fichier ouvert qui ne reviendra jamais correspond à ce que vous souhaitez faire. Il est tiré de http://docs.python.org/library/signal.html#module-signal
Mais un avertissement. Étant donné que Python utilise un verrou d'interpréteur global pour effectuer la gestion des signaux du système d'exploitation, il est sujet à certains problèmes de stabilité. Ces problèmes devraient cependant être rares normalement.
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