生产者消费者模型

生产着消费者模型.

生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。

一个编程方式

321原则

三种角色:生产者、消费者、仓库
两种关系:生产者与生产者之间是互斥关系,消费者与消费者之间是互斥关系,生产者与消费者之间是同步与互斥关系。
一个交易场所:仓库(这里我们用阻塞队列来表示)


什么是生产者
生产数据 把数据放在容器中 这个进程就是生产者
什么是消费者
在容器中取数据的进程 这个进程就是消费者
容器
就是缓冲区(队列).一个缓冲区,平衡了生产者和消费者的处理能力。.提高了效率

优点

解耦–生产者。消费者之间不直接通信,降低了耦合度。
支持并发
支持忙闲不均

实列

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()
posted @ 2020-03-01 10:07  一起奥利给  阅读(136)  评论(0编辑  收藏  举报