先入先出、先入后出;按优先级

#!/usr/bin/env python # Author:Zhangmingda import queue q = queue.Queue() #先入先出 q.put('A') q.put('B') q.put('C') print(q.get()) print(q.get()) print(q.get())

#!/usr/bin/env python # Author:Zhangmingda import queue q = queue.LifoQueue() #先入后出 q.put('A') q.put('B') q.put('C') print(q.get()) print(q.get()) print(q.get())

#!/usr/bin/env python # Author:Zhangmingda import queue q = queue.PriorityQueue() #优先级策略put内容为元组,第一个为优先级代码,必须全部为数字或者字母 q.put((3,'zhangsan')) q.put((5,'lisi')) q.put((1,'wangwu')) print(q.get()) print(q.get()) print(q.get())
生产者消费者模型

#!/usr/bin/env python # Author:Zhangmingda import threading,time,queue q = queue.Queue(maxsize=10) #创建一个消息队列实例,限制最大容纳的消息总数最多10个 '''生产者函数''' def producer(name): count =0 #消息开始编号 while True: q.put('骨头%s'% count) print('%s生产了第%s个骨头'%(name,count),'当前队列总数:%s'% q.qsize()) count += 1 #区别每个生产的消息 time.sleep(0.5) #控制生产消息的频率 '''消费者函数''' def consumer(name):# while True: print('%s 吃了:%s'%(name,q.get())) time.sleep(1) #控制消费者消费消息的频率 p = threading.Thread(target=producer,args=('Zhangmingda',)) c = threading.Thread(target=consumer,args=('张阳',)) p.start() c.start()

C:UsersAdministratorDesktopPython3_studyvenvScriptspython.exe C:/Users/Administrator/Desktop/Python3_study/day9/生产者消费者模型.py Zhangmingda生产了第0个骨头 当前队列总数:1 张阳 吃了:骨头0 Zhangmingda生产了第1个骨头 当前队列总数:1 Zhangmingda生产了第2个骨头 当前队列总数:2 张阳 吃了:骨头1 Zhangmingda生产了第3个骨头 当前队列总数:2 张阳 吃了:骨头2 Zhangmingda生产了第4个骨头 当前队列总数:2 Zhangmingda生产了第5个骨头 当前队列总数:3 张阳 吃了:骨头3 Zhangmingda生产了第6个骨头 当前队列总数:3 Zhangmingda生产了第7个骨头 当前队列总数:4 张阳 吃了:骨头4 Zhangmingda生产了第8个骨头 当前队列总数:4 Zhangmingda生产了第9个骨头 当前队列总数:5 张阳 吃了:骨头5 Zhangmingda生产了第10个骨头 当前队列总数:5 Zhangmingda生产了第11个骨头 当前队列总数:6 张阳 吃了:骨头6 Zhangmingda生产了第12个骨头 当前队列总数:6 Zhangmingda生产了第13个骨头 当前队列总数:7 张阳 吃了:骨头7 Zhangmingda生产了第14个骨头 当前队列总数:7 Zhangmingda生产了第15个骨头 当前队列总数:8 张阳 吃了:骨头8 Zhangmingda生产了第16个骨头 当前队列总数:8 Zhangmingda生产了第17个骨头 当前队列总数:9 张阳 吃了:骨头9 Zhangmingda生产了第18个骨头 当前队列总数:9 Zhangmingda生产了第19个骨头 当前队列总数:10 张阳 吃了:骨头10 Zhangmingda生产了第20个骨头 当前队列总数:10 Zhangmingda生产了第21个骨头 当前队列总数:10 张阳 吃了:骨头11 Zhangmingda生产了第22个骨头 当前队列总数:10 张阳 吃了:骨头12 Zhangmingda生产了第23个骨头 当前队列总数:10 张阳 吃了:骨头13 Zhangmingda生产了第24个骨头 当前队列总数:10 张阳 吃了:骨头14 Zhangmingda生产了第25个骨头 当前队列总数:10 张阳 吃了:骨头15 Zhangmingda生产了第26个骨头 当前队列总数:10 张阳 吃了:骨头16
执行结果说明:当消息队列不满的时候,就会while循环去生产消息。满了的时候就等着被消费掉(此时生产消息的进程卡主等待状态)再生产。