python设计模式-生产者与消费者模式

生产者与消费者模式

(一)什么是生产者消费者模式

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

(二)为什么要使用生产者消费者模式

在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完,才能继续生产数据。同样的道理,如果消费者的处理能力大于生产者,那么消费者就必须等待生产者。为了解决这个问题于是引入了生产者和消费者模式。

(三)python实现
# -*- coding: utf-8 -*-

__author__ = 'loco_python'

from threading import Thread
import Queue
import time

# 创建一个队列,保存生产数据
q = Queue.Queue()

class Producer(Thread):
    """用类实现生产者多线程的写法"""
    def run(self):
        count = 0
        while True:
            if q.qsize() < 50:
                for i in range(3):
                    count += 1
                    msg = "产品 %d" % count
                    q.put(msg)
                    print '生产了%s' % msg
            time.sleep(1)

class Customer(Thread):
    """用类实现消费者多线程的写法"""

    def run(self):
        while True:
            if q.qsize() > 20:
                for i in range(2):
                    msg = q.get()
                    print "消费了%s" % msg
            time.sleep(1)

# 每秒生产3条数据,生产了51条数据阻塞
p = Producer()
p.start()

c = Customer()
c.start()
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值