我有一个简单的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,然后杀死它。发生了什么事?
答案 0 :(得分:1)
t = threading.Thread(target=worker)
您想要传递对worker函数的引用,不应该调用它。
答案 1 :(得分:0)
worker函数不会退出,因此它不会加入。其次你可能想加入线程而不是队列。
我不是python线程的专家,但队列只是用于线程之间的数据传递。