生产者和消费者模型
优化生产者和消费者模型 [生产者生产多少,对应的就消费多少]
子进程1:消费者模型
1.循环
(1)消费食物(food=q.get())
(2)判断食物是None,break
(3)随机延时0.1-1秒
(4)打印 xx吃了一个xx
子进程2:生产者模型
1.循环遍历
(1)随机延时0.1-1秒
(2)打印 xx生产了xx
(3)存储生产 用q.put()
主进程:
1.创建消费者
2.创建生产者
注:在生产所有数据之后,在对列的最后塞进去一个None,用来表达以生产完所有数据
from multiprocessing import Process,Queue
import time,random
消费者模型
def consumer(q,name):
while True:
food = q.get()
if food is None:
break
time.sleep(random.uniform(0.1,1))
print("%s 吃了一个%s" % (name,food))
#生产者模型
def producer(q,name,food):
for i in range(5):
time.sleep(random.uniform(0.1,1))
print("%s 生产了 %s%s" % (name,food,i))
q.put(food+str(i))
if __name__ == "__main__":
q = Queue()
# 创建生产者
p1 = Process(target=producer,args=(q,"周永玲","便便"))
p1.start()
# 创建生产者2号
p2 = Process(target=producer,args=(q,"常远","茶叶"))
p2.start()
# 创建消费者
c1 = Process(target=consumer,args=(q,"张龙"))
c1.start()
# 创建消费者2号
c2 = Process(target=consumer,args=(q,"林银展"))
c2.start()
p1.join()
p2.join()
# 在生产完所有数据之后,在队列的最后塞进去一个None,用来表达已经生产完所有数据;
q.put(None) # 便便0 便便1 便便2 便便3 便便4 None
q.put(None) # 便便0 便便1 便便2 便便3 便便4 茶叶1 茶叶2 茶叶3 茶叶4 None None
print("主程序执行结束 ... ")
扩展
from multiprocessing import Process,JoinableQueue
import time,random
# 消费者模型
def consumer(q,name):
while True:
food = q.get()
time.sleep(random.uniform(0.1,1))
print("%s 吃了一个%s" % (name,food))
q.task_done()
# 生产者模型
def producer(q,name,food):
for i in range(5):
time.sleep(random.uniform(0.1,1))
print("%s 生产了 %s%s" % (name,food,i))
q.put(food+str(i))
if __name__ == "__main__":
# 创建队列
jq = JoinableQueue()
# 消费者进程
c1 = Process(target=consumer,args=(jq,"张晓东"))
c1.daemon = True
c1.start()
# 生产者进程
p1 = Process(target=producer,args=(jq,"黄乐锡","大茄子"))
p1.start()
# 等待生产者把所有数据放到队列中;
p1.join()
# 直到所有数据被消费完毕之后,放行;
jq.join()
print("主进程执行结束 ... ")