Я получил простую программу, как показано ниже:
import threading
import time
import signal
WITH_DEADLOCK = 0
lock = threading.Lock()
def interruptHandler(signo, frame):
print str(frame), 'received', signo
lock.acquire()
try:
time.sleep(3)
finally:
if WITH_DEADLOCK:
print str(frame), 'release'
lock.release()
signal.signal(signal.SIGINT, interruptHandler)
for x in xrange(60):
print time.strftime("%H:%M:%S"), 'main thread is working'
time.sleep(1)
Итак, если вы запустите эту программу, и даже Ctrl + C будет нажата дважды в течение 3 секунд, нет взаимоблокировки. При каждом нажатии клавиши Ctrl + C отображается соответствующая строка. Если вы измените WITH_DEADLOCK = 1, и дважды нажмите Ctrl + C (с 3 секундами), тогда программа будет висела.
Может ли кто-нибудь объяснить, почему операция печати делает такую разницу?
(Моя версия python 2.6.5)