date: 2021-08-06title: python之队列和生产者消费者模型 #标题
tags: python #标签
categories: python # 分类
记录下消息中间件中在python中的使用。
一个简单队列的demo
from multiprocessing import Process, Queue
import random
import time
# 消费消息
def consumer(q, name): # 消费者:通常取到数据之后还要进行某些操作
while 1:
food = q.get()
if food:
print(f'{name}吃了{food}')
else:
break
# 生产消息
def producer(q, name, food): # 生产者:通常在放数据之前需要先通过某些代码来获取数据
for i in range(10):
print(f'{name}生产了{food}{i}')
time.sleep(random.random())
q.put(f'{food}{i}')
def main():
q = Queue() # 实例化队列
p1 = Process(target=producer, args=(q, '张三', '苹果')) # 生产消息
p2 = Process(target=producer, args=(q, '王五', '香蕉')) # 生产消息
p1.start()
p2.start()
c = Process(target=consumer, args=(q, '李四')) # 消费消息
c.start()
# 当生产者程序执行完成后再投递两个None消息
p1.join()
p2.join()
# 最后投递两个 None,是为了控制消费者代码主动退出
q.put(None)
q.put(None)
if __name__ == '__main__':
main()