1

我有一个简单的 python 应用程序,如果我使用 queue.join(),它不会终止。下面是代码:

import threading
import Queue

q = Queue.Queue()

for i in range(5):
    q.put("BLAH")

def worker():
    while True:
         print q.qsize()
         a = q.get()
         print q.qsize()
         q.task_done()
         print q.qsize()


for i in range(2):
    t = threading.Thread(target=worker())
    t.daemon = True
    t.start()

q.join()

我还创建了一个看门狗线程,它打印的 threading.enumerate(),然后休眠 2 秒。唯一剩下的线程是 MainThread,队列大小实际上是 0。这个脚本永远不会终止。我必须ctrl + z,然后杀死它。这是怎么回事?

4

2 回答 2

1
t = threading.Thread(target=worker)

你想传递一个对工作函数的引用,你不应该调用它。

于 2013-04-19T06:26:31.743 回答
0

worker 函数不会退出,因此它不会加入。其次,您可能想加入线程而不是队列。

我不是python线程方面的专家,但队列仅用于线程之间的数据传递。

于 2013-04-19T07:12:57.660 回答