由于代码第26行设置了daemon=False这个多线程程序无法退出,如果改为daemon=True就没事了。代码可以直接运行
p.s: basic_worker里面我设置了while循环的break条件。
为什么会产生这样的情况呢?
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Queue
import threading
def basic_worker(queue):
"""
工作者,当队列中没有任务的时候就执行退出。
"""
while True:
item = queue.get()
if item is None:
break
print item
queue.task_done()
def basic():
"""
主线程,队列中总共放了4个任务。
"""
print 'start'
queue = Queue.Queue()
for i in range(4):
t = threading.Thread(target=basic_worker, args=(queue,))
t.daemon = False # 这里daemon必须等于True才能程序才能退出
t.start()
for item in range(4):
queue.put(item)
queue.join() # block until all tasks are done
print 'got here'
if __name__ == '__main__':
basic()
初步判断这个问题和Queue模块的get()函数有关,该函数的定义是
函数说明如下:
如果queue队列为空了,它会一直堵塞进程直到有数据可用,所以退不出程序
如果设置queue.get(True, 1),超时后就会抛出异常