gpt4 book ai didi

python - 为什么信号处理程序中的打印操作可能会改变死锁情况?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:39 26 4
gpt4 key购买 nike

我得到了如下简单的程序:

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)

因此,如果您启动该程序,甚至在 3 秒内按两次 Ctrl+C,则不会出现死锁。每次按下 Ctrl + C 时,都会显示正确的行。如果您更改 WITH_DEADLOCK=1 并按下 Ctrl+C 两次(3 秒内),那么程序将挂起。

有没有人可以解释为什么打印操作会产生如此大的差异?

(我的python版本是2.6.5)

最佳答案

老实说,我认为 J.F. Sebastian 的评论是这里最合适的答案 - 您需要让您的信号处理程序可重入,目前它不是,而且它在没有打印语句的情况下仍然可以工作,这主要是令人惊讶。

关于python - 为什么信号处理程序中的打印操作可能会改变死锁情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777610/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com