Python线程应用程序没有终止

时间:2013-04-19 06:14:45

标签: python multithreading

我有一个简单的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,然后杀死它。发生了什么事?

2 个答案:

答案 0 :(得分:1)

t = threading.Thread(target=worker)

您想要传递对worker函数的引用,不应该调用它。

答案 1 :(得分:0)

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

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