Karena Anda tidak threading (dan saya berasumsi ini disengaja dan dalam beberapa kasus bijaksana), Anda harus menggunakan jenis interupsi. Sinyal adalah jenis interupsi pada sistem Unix yang memungkinkan Anda untuk kembali ke panggilan balik selama panggilan yang dapat memblokir.
Contoh file terbuka yang tidak akan pernah kembali ini sejalan dengan apa yang ingin Anda lakukan. Ini diambil dari http://docs.python.org/library/signal.html#module-signal
Tapi peringatan. Karena Python menggunakan Kunci Penerjemah Global untuk melakukan penanganan sinyal OS, itu tunduk pada beberapa masalah stabilitas. Masalah-masalah ini seharusnya jarang terjadi secara normal.
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