从下面图中可以发现生产者和消费者之间用中间类似一个队列一样的东西串起来。这个队列可以想像成一个存放产品的“仓库”,生产者只需要关心这个“仓库”,并不需要关心具体的消费者,对于生产者而言甚至都不知道有这些消费者存在。对于消费者而言他也不需要关心具体的生产者,到底有多少生产者也不是他关心的事情,他只要关心这个“仓库”中还有没有东西。这种模型是一种松耦合模型。这样可以回答我上面提出的第一个问题。这个模型的产生就是为了复用和解耦。


wKiom1kZRhnDiRShAABiHQfOILg161.jpg

代码实现:

#!/usr/bin/env python
#coding:utf-8
from Queue import Queue
from threading import Thread
from time import sleep

class Producer(Thread):
    def __init__(self, queue, group=None, target=None, name=None,
                    args=(), kwargs=None, verbose=None):
        Thread.__init__(self, group=None, target=None, name=None,
                    args=(), kwargs=None, verbose=None)
        self.queue = queue

    def run(self):
        while True:
            if self.queue.full():
                print '\033[31m生产满了\033[0m'
                sleep(2)
            else:
                queue.put('包子')
                print '生产了一个包子'
                sleep(2)

class Consumer(Thread):
    def __init__(self, queue, group=None, target=None, name=None,
                    args=(), kwargs=None, verbose=None):
        Thread.__init__(self, group=None, target=None, name=None,
                    args=(), kwargs=None, verbose=None)
        self.queue = queue

    def run(self):
        while True:
            if self.queue.empty():
                print '\033[31m没有包子了\033[0m'
                sleep(2)
            else:
                queue.get()
                print '消费了一个包子'
                sleep(2)


queue = Queue(maxsize=100)
'''生产者'''
pr = Producer(queue)
pr.start()

'''消费者'''
for i in range(2):
    con = Consumer(queue)
    con.start()