即使我没有将线程设置为守护进程,一旦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()
任何帮助都将受到高度赞赏!
答案 0 :(得分:12)
当您在主线程中调用queue.join()
时,它所做的只是阻塞主线程,直到工作人员处理了队列中的所有内容。它不会停止继续执行无限循环的工作线程。
如果工作线程是非deamon,它们的继续执行会阻止程序停止,而不管主线程是否已完成。
答案 1 :(得分:0)
我遇到了这种情况,队列中的所有内容都已处理完,但主线程在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()