import queue import threading import time exitFlag =0 class myThread(threading.Thread): def __init__(self, threadID, name, m_queue): threading.Thread.__init__(self) self.threadID= threadID #线程ID self.name = name #线程名称 self.m_queue =m_queue #出列顺序 def run(self): print("开始线程" + self.name) process_data(self.name, self.m_queue) #执行工作函数 print("结束线程" + self.name) #执行工作函数 def process_data(threadName, m_queue): #传入线程名称以及出列顺序 while not exitFlag: #判断线程是否执行完毕 #获取线程同步锁 queueLock.acquire() if not workQueue.empty(): #判断工作队列是否处理完毕 data = m_queue.get() queueLock.release() #释放锁 print("%s processing %s" % (threadName, data)) else: queueLock.release() #释放线程同步锁 time.sleep(1) #创建线程列表 threadList =["thread-1", "thread-2", "thread-3"] #需要处理的数据 nameList =["One", "Two", "Three", "Four", "Five", ] #创建线程同步锁 queueLock =threading.Lock() #确认出列顺序,先进先出 workQueue =queue.Queue() #按照先进后出的方式出列 #workQueue =queue.LifoQueue() #确认出列顺序,按照优先级顺序出列 #workQueue = queue.PriorityQueue() #创建线程池,稍后会将创建的线程加入线程池中 threads =[] #创建线程ID threadID=1 #批量创建新线程 for tName in threadList: thread =myThread(threadID, tName, workQueue) #创建线程,传入线程id,线程名称,出列顺序 thread.start() #线程启动 threads.append(thread) #将线程放入线程池 threadID +=1 #定义下一个线程的id值 #获取线程锁 queueLock.acquire() for work in nameList: workQueue.put(work) queueLock.release() #释放线程锁 #等待队列消息处理完毕 while not workQueue.empty(): pass #通知线程退出 exitFlag =1 #等待线程池线程工作完毕 for t in threads: t.join() print(nameList) print("退出主线程.......")