前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python发布订阅者模式(超简版)

python发布订阅者模式(超简版)

作者头像
静谧星空TEL
发布2021-04-27 10:53:44
7900
发布2021-04-27 10:53:44
举报
文章被收录于专栏:云计算与大数据技术

1、生产者基类(父类)

代码语言:javascript
复制
class BaseProducer(object):
    '''
    生产者
    '''
    def __init__(self,name):
        '''
        初始化生产对象
        :param name:生产名称
        '''
        self.name = name
        self.number = 0
        self.object = None

    def action(self):
        '''
        抽象方法:生产方法
        :return:
        '''
        pass

    def action(self,number,object):
        '''
        带参的生产方法:根据数量和对象生产不同的产品
        :param number:生产数量
        :param object:生产产品
        :return:
        '''
        self.number = number
        self.object = object
        while number > 0:
            obj = object()
            list.append(obj)
            number -= 1
        return list

    def __str__(self):
        '''
        生产者的toString方法
        :return:
        '''
        return "生产名称:"+self.name+"\t生产数量:"+str(self.number)+"\t生产对象:"+str(self.object)

2、消费者基类(父类)

代码语言:javascript
复制
class BaseConsumer(object):
    '''
    消费者
    '''
    def __init__(self,name):
        '''
        初始化消费者对象
        :param name:消费者名称
        '''
        self.name = name

    def action(self,object):
        '''
        消费者消费动作
        :param object:消费物品
        :return:
        '''
        pass

3、根据业务模拟编写生产者消费者

代码语言:javascript
复制
import Queue
from base_producer import BaseProducer
from base_consumer import BaseConsumer


class WebProducer(BaseProducer):

    # def __init__(self,name):
    #     self.name = name

    def action(self, number, object):
        '''
        根据数量和对象生产不同的产品
        :param number:生产数量
        :param object:生产产品
        :return:
        '''
        self.number = number
        list = []
        while number > 0:
            obj = object()
            list.append(obj)
            number -= 1
        return list


class WebConsumer(BaseConsumer):

    def __init__(self, name):
        self.name = name

    def action(self, object):
        for i in object:
            # 打印输出生产者
            print(i)


class A():
    '''
    用于测试的具体消费类
    '''
    pass


if __name__ == '__main__':
    # 定义一个队列对象,用于中间缓存
    queue = Queue.Queue()
    # new 一个生产者
    producer = WebProducer("生产者1")
    # 执行生产动作,放回产品列表
    list = producer.action(10, A)
    print(producer.__str__())
    # 把生产的产品放到队列中
    queue.put(list)
    # new 一个消费者
    consumer = WebConsumer("消费者1")
    # 消费者从队列中消费产品
    list = queue.get()
    print(list)
    if None is not list:
        consumer.action(list)
    else:
        print("No producet consumption for the time being!")

4、运行结果

5、总结

其实发布订阅者模式就是生产者消费者模式,

区别在于发布订阅者多了一个中间队列,

生产者生产产品,放到队列中,消费者从队列中取出产品消费。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档