生产者消费者模型 (进程)
生产者消费者模型
-
生产者将要处理的数据放入一个容器中,消费者从容器中取出
- 生产者:通常在放数据之前需要通过某些代码来获取数据
- 消费者:通常取到数据之后在进行某些操作
-
本质:
- 把原本获取数据处理数据的完整过程进行了解耦(注:紧耦合程序:所有代码写在一起不分函数,类,文件比较乱(不好),松耦合性:拆分的很清楚的程序(好))
- 把生产数据和消费数据分开,根据生产和消费的效率不同,来规划生产者和消费者的个数,让程序的执行效率达到平衡
- 就是让生产数据和消费数据的效率达到平衡并且最大化的效率
-
代码
-
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就是由两个生产者消费者模型组成的