生产者消费者模型 (进程)

生产者消费者模型

  • 生产者将要处理的数据放入一个容器中,消费者从容器中取出

    • 生产者:通常在放数据之前需要通过某些代码来获取数据
    • 消费者:通常取到数据之后在进行某些操作
  • 本质:

    • 把原本获取数据处理数据的完整过程进行了解耦(注:紧耦合程序:所有代码写在一起不分函数,类,文件比较乱(不好),松耦合性:拆分的很清楚的程序(好))
    • 把生产数据和消费数据分开,根据生产和消费的效率不同,来规划生产者和消费者的个数,让程序的执行效率达到平衡
    • 就是让生产数据和消费数据的效率达到平衡并且最大化的效率
  • 代码

    • from multiprocessing import Queue,Process
      import time
      import random
      
      def consumer(q,name):   #消费者
          while True:
              food=q.get()
              if food:
                  print(f'{name}吃了{food}')
              else:
                  break
      
      def producer(q,name,food):  #生产者
          for i in range(10):
              foodi=f'{food}{i}'
              print(f'{name}生产了{foodi}')
              time.sleep(random.random())
              q.put(foodi)
      if __name__ == '__main__':
          q=Queue()
          c1=Process(target=consumer,args=(q,'lili'))
          c1.start()
          c2 = Process(target=consumer, args=(q, 'yunyun'))
          c2.start()
          p1=Process(target=producer,args=(q,'minmin','梨'))
          p2=Process(target=producer,args=(q,'xiaotong','苹果'))
          p1.start()
          p2.start()
          p1.join() #当生产者生产完之后结束,在Queue队列中放入None,消费者get到None之后直接退出
          p2.join()
          q.put(None) #切记有几个消费者就要在Queue队列中放入几个None
          q.put(None)
      
  • celery:celery就是由两个生产者消费者模型组成的

posted @ 2021-06-21 23:41  刘家小仙女  阅读(125)  评论(0编辑  收藏  举报