Python" print"导致线程死锁

时间:2016-05-06 14:46:08

标签: python multithreading printing deadlock

我有一个包含工人和经理线程的大型系统。

我遇到了其中一个线程使用的问题:

print "before time sleep"
time.sleep(5)
print "after time sleep"

它会打印很多次,然后突然只显示"在睡觉前#34; 并停止,直到我杀死所有其他线程。 没有其他线程正在停止。

我认为代码的其他部分是锁定命令行输出或类似的东西,但我不知道如何找到该位置(它可能需要最多24小时才能发生)

我正在使用python 2.7,并且在Windows服务器上发生错误。

1 个答案:

答案 0 :(得分:0)

我有同样的问题,取决于我在print方法的“end”属性中作为值放置的内容,我得到了一个threadLock:

from queue import LifoQueue
import threading
q = LifoQueue()

for i in range(100):
    q.put(i)

def process_job(q, threadName):
    while not q.empty():
        print(q.get(), end=' ')

workers = [
    threading.Thread(target=process_job, args=(q,'1')),
    threading.Thread(target=process_job, args=(q,'2')),
    threading.Thread(target=process_job, args=(q,'3')),
]

for w in workers:
    w.setDaemon(True)
    w.start()

最有趣的部分是它完美运作(只要结尾的值为空白“”)。