# -*- coding:utf-8 -*-
import Queue
import time
import threading
# 需要执行的业务主体
def domain(id):
time.sleep(2)
print(id, "done")
class update_proccess(threading.Thread):
def __init__(self,queue_list):
threading.Thread.__init__(self)
self.queue_list = queue_list
def run(self):
while True:
try:
if self.queue_list.qsize() == 0:
break
print(u"surplus:",self.queue_list.qsize())
# 没隔1秒检测一下队列的长度,由此判断队列的执行情况
time.sleep(1)
except Queue.Empty:
break
class myThread(threading.Thread):
def __init__(self, queue_list):
threading.Thread.__init__(self)
self.queue_list = queue_list
def run(self):
while True:
try:
# 获取队列,获取时需要阻塞,不设置阻塞的话会一直去尝试获取资源
task = self.queue_list.get(block = True, timeout = 1)
except Queue.Empty:
break
# 取到数据,开始处理(依据需求加处理代码)
domain(task)
# 处理完主体业务代码后需要将该队列的资源释放
self.queue_list.task_done()
# 创建指定长度的队列
queue_list = Queue.Queue(10)
# 向资源池里面放10个数用作测试
for i in range(10):
queue_list.put(i)
# 开Thread_num个线程
for i in range(0, 2):
worker = myThread(queue_list)
worker.start()
# 开启队列监控线程
update_proccess(queue_list).start()
queue_list.join() #等待所有的队列资源都用完