通过Queue控制线程并发,并监控队列执行进度
# -*- 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() #等待所有的队列资源都用完