Python Queue.join()



即使我没有将线程设置为守护进程,一旦 queue.join() 完成并取消阻止,程序不应该自行退出吗?

#!/usr/bin/python
import Queue
import threading
import time
class workerthread(threading.Thread):
        def __init__(self,queue):
                threading.Thread.__init__(self)
                self.queue=queue
        def run(self):
                print 'In Worker Class'
                while True:
                        counter=self.queue.get()
                        print 'Going to Sleep'
                        time.sleep(counter)
                        print ' I am up!'
                        self.queue.task_done()
queue=Queue.Queue()
for i in range(10):
        worker=workerthread(queue)
        print 'Going to Thread!'
        worker.daemon=True
        worker.start()
for j in range(10):
        queue.put(j)
queue.join()

当您在主线程中调用 queue.join() 时,它所做的只是阻塞主线程,直到工作人员处理完队列中的所有内容。它不会停止工作线程,这些线程继续执行其无限循环。

如果工作线程是非 deamon,则无论主线程是否已完成,它们的持续执行都会阻止程序停止。

我也遇到了这种情况,队列中的所有内容都已处理完毕,但主线程在 Queue.task_done() 点被阻塞,这里是代码块。

import queue
def test04():
    q = queue.Queue(10)
    for x in range(10):
        q.put(x)
    while q.not_empty:
        print('content--->',q.get())
        sleep(1)
    re = q.task_done()  
    print('state--->',re,'n')
    q.join()
    print('over n')
test04()

最新更新