date: 2021-08-06title: python之队列和生产者消费者模型 #标题
tags: python #标签
categories: python # 分类
记录下消息中间件中在python中的使用。
一个简单队列的demo
from multiprocessing import Process, Queueimport randomimport 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()