queue模块

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

#!/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())
queue先入先出
#!/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())
queue先入后出
#!/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循环去生产消息。满了的时候就等着被消费掉(此时生产消息的进程卡主等待状态)再生产。

原文地址:https://www.cnblogs.com/zhangmingda/p/9251615.html