生产者消费模型

"""
生产者消费者模型(celery消息队列)
生产者:生产的数据(做包子的)
消费者:处理数据的(吃包子的)
生产者消费模型是用来平衡生产者与消费者之间的能力的,例如有时候消费者消费的速度太快,
生产者来不及生产那么多的数据,或者有时候消费者的消费速度太慢.生产者生产的数据大量的累积在一起
有了这个生产者消费模型之后,就可以平衡双方的能力了
"""
from multiprocessing import Process,Queue,JoinableQueue
import time
import random


def producer(name,food,q):
# 产生,生产数据的,生产好数据之后就放到管道中去,其他某一个进程就可以取用了
for i in range(3):
data = '%s生产了%s%s'%(name,food,i)
time.sleep(random.randint(1,3))
q.put(data) ###放到管道q中去
print(data)


def consumer(name,q):
while True:
data = q.get()
if data == None:break
time.sleep(random.randint(1,3))
print('%s吃了%s' % (name,data))
q.task_done() # 已经从队里中拿到数据 并且处理完毕了


if __name__ == '__main__':
q = JoinableQueue()
p = Process(target=producer,args=('大厨jason','肉包子',q))
p1 = Process(target=producer,args=('配菜owen','馒头',q))
c = Process(target=consumer,args=('吃货egon',q))
c1 = Process(target=consumer,args=('坑货尚老师',q))
p.start()
p1.start()
c.daemon = True ##守护进程
c1.daemon = True ##守护进程
c.start()
c1.start()

p.join()
p1.join()
q.join() # 等带队列中所有的数据都被取干净





原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11312585.html