python2.7多线程在prin中挂起

2024-10-06 12:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我的python软件断断续续地死锁(可能是由于某种竞争条件)

在一个正在运行的线程中,它运行

while True:
   msg = printQ.get()
   print msg
   sys.stdout.flush()

调试时,我看到我的一个线程在 系统stdout.flush(). 如果我去掉冲洗线,线就会挂在印刷处。 这是唯一打印到stdout的线程

如果我禁用这个线程,我的软件不会死锁

在多线程环境中刷新stdout是否有任何已知问题?在

这些是在软件死锁时跟踪正在运行的线程。你们有什么发现吗?对我来说,这看起来就像是在排队等东西。唯一让我感到奇怪的是系统stdout.flush()

^{pr2}$

Tags: trueget软件环境系统stdoutsysmsg
1条回答
网友
1楼 · 发布于 2024-10-06 12:40:48

阿法伊克系统标准输出不是真正的线程安全的,但是没有任何代码,实际上是不可能说的。出于调试目的,您可以尝试锁定sys.stdout.flush,例如:

orig_flush = sys.stdout.flush
flush_lock = threading.Lock()

def myflush():  
    with flush_lock:
        orig_flush()

sys.stdout.flush = myflush

# ... eventually:
sys.stdout.flush = orig_flush

相关问题 更多 >