即使我没有将线程设置为守护进程,一旦 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()