Python 生产者与消费者模型

作为一只单身狗,今天注定要吃定狗粮了。
接触这一行,时不时会听到生产者与消费者模型,今天在学习线程中,觉得这个必要要练习一下。

为什么要使用生产者与消费者模型

在多线程的开发中,如果生产者处理效率很高,消费者处理效率很低,那么生产者必须等待消费者处理完才能生产数据,同样,消费者处理效率很高,生产者处理效率很低,那么消费者就必须等待生产者生产数据。为了解决这个处理效率不一致,充分发挥生产者与消费者的性能,就引入了生产者与消费者模型。

什么是生产者和消费者模型

生产者和消费者模式通过一个容器来解决生产者与消费者速率不匹配导致的阻抗不匹配,解耦是它的另一个作用。生产者与消费者之间不直接通讯,而是通过阻塞队列来进行通讯,所以生产者不用等待消费者消费,直接丢给阻塞队列,同理,消费者也是一样,不用通过生产者取得数据,而是从阻塞队列里面拿取数据。这样,队列就相当于一个缓冲区,一个容器,平衡生产者与消费者的处理能力。

用队列实现的一个简单的Demo

很简陋的一段程序:

#model.py

import queue
import threading
import time


class Prodecer(threading.Thread):
    def __init__(self, q):
        super(Prodecer, self).__init__()
        self.q = q

    def run(self):
        cont = 0
        while True:
            cont_str = '产品{}'.format(cont)
            print('生产者---' + cont_str)
            self.q.put(cont_str)
            cont += 1
            time.sleep(1)


class Consumer(threading.Thread):
    def __init__(self, q, name):
        super(Consumer, self).__init__()
        self.q = q
        self.name = name

    def run(self):
        while True:
            print('消费者{}---{}剩余产品数{}'.format(self.name, self.q.get(), self.q.qsize()))
            time.sleep(3)


def func():
    q = queue.Queue()
    Prodecer(q).start()
    Consumer(q, 1).start()
    Consumer(q, 2).start()


if __name__ == '__main__':
    func()

运行结果:


Python 生产者与消费者模型_第1张图片
结果.gif

如有错误,欢迎斧正。

你可能感兴趣的:(Python 生产者与消费者模型)