Bởi vì bạn không phân luồng (và tôi cho rằng điều này là cố ý và trong một số trường hợp là khôn ngoan) nên bạn phải sử dụng một loại ngắt. Tín hiệu là một loại ngắt trên hệ thống Unix để cho phép bạn quay lại lệnh gọi lại trong một cuộc gọi có thể chặn.
Ví dụ về một tệp đang mở sẽ không bao giờ quay trở lại này phù hợp với những gì bạn muốn làm. Nó được lấy từ http://docs.python.org/library/signal.html#module-signal
Nhưng một lời cảnh báo. Vì Python sử dụng Khóa thông dịch viên toàn cầu để thực hiện xử lý tín hiệu hệ điều hành nên Python có thể gặp một số vấn đề về độ ổn định. Mặc dù vậy, những vấn đề này sẽ hiếm khi xảy ra.
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