Python生产者消费者模型

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

Python生产者消费者模型

代码实现:

#!/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()

下面关于Python的文章您也可能喜欢,不妨参考下:

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] 下载见

Python教程PDF合集下载 

零基础如何入门Python

Ubuntu 14.04安装Python 3.3.5 

CentOS 6.5 脚本自动化装 Python2.6升级2.7 

CentOS上源码安装Python3.4 

Ubuntu 14.04下Python数据处理环境搭建 

Python Paramiko模块安装和使用 

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码]

在CentOS 6.5上安装Python2.7 

Ubuntu 14.04 LTS下编译安装Open Babel和Python语言绑定

Python常见数据结构整理 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b6ee67c2c22773bd2576055658302eb5.html