码迷,mamicode.com
首页 > 其他好文 > 详细

生产者消费者模型

时间:2020-03-01 10:28:04      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:遇到   code   ssi   imp   一个   问题   print   strong   线程   

生产着消费者模型.

本质 队列间通信
为什么要使用生产者和消费者模式
在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,**如果生产者处理速度很快**,**而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者**,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。
多个进程实现并发的效果: 生产者消费者模型.
3个成员 生产者 消费者 容器
模型, 设计模式,归一化设计, 理论等等,教给你一个编程思路.如果以后遇到类似的情况,直接套用即可.
如果没有容器, 生产者与消费者强耦合性.不合理.所以我们要有一个容器,缓冲区.平衡了生产力与消费力.
什么是生产者
生产数据 把数据放在容器中 这个进程就是生产者
什么是消费者
在容器中取数据的进程 这个进程就是消费者
容器
就是缓冲区(队列).一个缓冲区,平衡了生产者和消费者的处理能力。.提高了效率

实列

from multiprocessing import Process
from multiprocessing import Queue
import random
import time
def task1(q):#生产者
    for i in range(6):
        time.sleep(random.randint(1,3))
        q.put(f'{i}号包子')
        print(f'生产者生产了{i}号包子')
def task2(q):#消费者
    while 1:
        try:
            time.sleep(random.randint(1, 3))
            q1=q.get(timeout=3)
            print(f'消费者取得{q1}')
        except Exception:
            return
if __name__ == '__main__':
    q=Queue()
    p1=Process(target=task1,args=((q,)))
    p2=Process(target=task2,args=((q,)))
    p1.start()
    p2.start()

生产者消费者模型

标签:遇到   code   ssi   imp   一个   问题   print   strong   线程   

原文地址:https://www.cnblogs.com/saoqiang/p/12388477.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!