Python线程应用程序未终止

Python线程应用程序未终止,python,multithreading,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.t

我有一个简单的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秒钟。剩下的唯一线程是主线程,队列大小实际上是0。此脚本永远不会终止。我必须按住ctrl+z,然后杀死它。发生什么事了

t = threading.Thread(target=worker)
如果要传递对辅助函数的引用,则不应调用它


如果要传递对辅助函数的引用,则不应调用它。

辅助函数不退出,因此不会加入。其次,您可能希望加入线程而不是队列


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

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


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

将线程创建更改为
t=threading。线程(target=worker)
将线程创建更改为
t=threading。线程(target=worker)
python的
队列
实际上允许
join
操作,这表示所有排队的项目都已弹出,并相应地调用了
task\u done
。此外,由于使用了守护进程线程,即使守护进程线程仍在运行,主应用程序也将被允许退出。Python的
Queue
实际上允许
join
操作,这表明所有排队的项都已弹出,并相应地调用了
task\u done
。此外,由于使用了守护进程线程,因此即使守护进程线程仍在运行,也将允许主应用程序退出。