Python 的 Queue 同步、线程安全的队列类别在模块中提供,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue和优先级队列 PriorityQueue。
1、说明
所有这些队列都实现了锁原语,可以直接用于多线程,可以用于线程间的同步。
模块中常用的方法如下:
Queue.qsize() 返回队列的大小
Queue.empty() 如果队列是空的,返回True,相反,False
Queue.full() 如果队列满了,回到True,相反,False
Queue.full 与 maxsize 大小对应
Queue.get([block[, timeout]])获取队列,timeout等待时间
Queue.get_nowait() 相当Queue.get(False)
Queue.put(item) 写入队列,timeout等待时间
Queue.put_nowait(item) 相当Queue.put(item, False)
Queue.task_done() 完成一项工作后,Queue.task_done()函数向已完成任务的队列发送信号
Queue.join() 事实上,这意味着等到队列空了再执行其他操作
2、实例
#!/usr/bin/python3 importqueue importthreading importtime exitFlag=0 classmyThread(threading.Thread): def__init__(self,threadID,name,q): threading.Thread.__init__(self) self.threadID=threadID self.name=name self.q=q defrun(self): print("开启线程:"+self.name) process_data(self.name,self.q) print("退出线程:"+self.name) defprocess_data(threadName,q): whilenotexitFlag: queueLock.acquire() ifnotworkQueue.empty(): data=q.get() queueLock.release() print("%sprocessing%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(10) threads=[] threadID=1 #创建新线程 fortNameinthreadList: thread=myThread(threadID,tName,workQueue) thread.start() threads.append(thread) threadID+=1 #填充队列 queueLock.acquire() forwordinnameList: workQueue.put(word) queueLock.release() #等待队列清空 whilenotworkQueue.empty(): pass #是时候通知线程退出了 exitFlag=1 #等待所有线程完成 fortinthreads: t.join() print("退出主线程")
以上是python线程优先级队列的介绍,希望能够介绍每个人都有帮助。更多Python学习指导:python基础教程