date: 2021-08-06title: python之队列和生产者消费者模型 #标题
tags: python #标签
categories: python # 分类

记录下消息中间件中在python中的使用。

一个简单队列的demo

  1. from multiprocessing import Process, Queue
  2. import random
  3. import time
  4. # 消费消息
  5. def consumer(q, name): # 消费者:通常取到数据之后还要进行某些操作
  6. while 1:
  7. food = q.get()
  8. if food:
  9. print(f'{name}吃了{food}')
  10. else:
  11. break
  12. # 生产消息
  13. def producer(q, name, food): # 生产者:通常在放数据之前需要先通过某些代码来获取数据
  14. for i in range(10):
  15. print(f'{name}生产了{food}{i}')
  16. time.sleep(random.random())
  17. q.put(f'{food}{i}')
  18. def main():
  19. q = Queue() # 实例化队列
  20. p1 = Process(target=producer, args=(q, '张三', '苹果')) # 生产消息
  21. p2 = Process(target=producer, args=(q, '王五', '香蕉')) # 生产消息
  22. p1.start()
  23. p2.start()
  24. c = Process(target=consumer, args=(q, '李四')) # 消费消息
  25. c.start()
  26. # 当生产者程序执行完成后再投递两个None消息
  27. p1.join()
  28. p2.join()
  29. # 最后投递两个 None,是为了控制消费者代码主动退出
  30. q.put(None)
  31. q.put(None)
  32. if __name__ == '__main__':
  33. main()