python简单消息总线实现,类似于C++ Qt的信号槽
一、 概述
为了模块间解耦,消息总线是常用的方式。
在其它文章中分别提到了lua和C++语言的消息总线的实现
lua语言的消息总线的实现:lua简单消息总线实现,类似于C++ Qt的信号槽
cpp语言的消息总线的实现:C++的阻塞式消息总线message_bus实现
消息总线实现的基本原理如下:被通信对象向消息总线发布一个主题,这个主题包含消息主题和消息处理函数,消息主题标示某个特定的主题,消息处理函数用来响应该主题的某种消息类型。通信对象向消息总线发送某个特定主题和消息参数,总线就会根据消息主题和消息参数找到对应的消息处理函数处理该请求。
二、Python消息总线的实现
class PyBus (object):def __init__(self,):self.clear()def clear(self):self.subscriptions = {}def subscribe(self, subject, owner, func):if owner not in self.subscriptions:self.subscriptions[owner] = {}self.subscriptions[owner][subject] = funcdef has_subscription(self, owner, subject):return owner in self.subscriptions and subject in self.subscriptions[owner]def publish(self, subject, *args, **kwargs):for owner in self.subscriptions.keys():if self.has_subscription(owner, subject):self.subscriptions[owner][subject](*args, **kwargs)class BusSingleton(PyBus):def foo(self):passbus_singleton = PyBus()
核心是内部维护的subscriptions字典
三、测试代码
if __name__ == "__main__":START = 1111class Test1(object):def start(self):print("start1")class Test2(object):def start(self):print("start2")test1 = Test1()test2 = Test2()bus_singleton.subscribe(START, test1, test1.start)bus_singleton.subscribe(START, test2, test2.start)bus_singleton.publish(START)
python简单消息总线实现,类似于C++ Qt的信号槽相关推荐
- Qt的信号槽机制介绍(含Qt5与Qt4的差异对比)
转载地址: https://blog.csdn.net/nicai888/article/details/51169520 一 闲谈: 熟悉Window下编程的小伙伴们,对其消息机制并不陌生, 话说: ...
- 学习QT之信号槽机制详解
学习QT之信号槽机制详解 一.Qt信号槽机制 概念:信号槽是Qt框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如:按钮检测到自己被点击了一下,它就会发出一个信号(sig ...
- qt 关闭窗口的槽函数_勇哥的VC++应用框架学习之QT(1) 信号槽、按钮控件、opencv读取显示图片...
前言勇哥对于C语言,C++早些年有一些接触,这个系列贴子就记载一下C++应用框架的学习经验. 在写程序时,UI.基础类库.应用程序框架对于vc来讲,只能依靠MFC和QT了. 勇哥对MFC有很强的抵触, ...
- Qt的信号槽机制介绍
Qt 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 Qt ...
- QT中信号槽的概念及使用
文章目录 信号槽的概念 函数原型 信号槽连接的三种方式 方式一 方式二 方式三 参数传递 全局参数 信号槽传参 信号槽的对应关系 总结 信号槽的概念 信号函数与槽函数是 Qt 在 C++ 的基础上新增 ...
- Boost::signals2 类QT的信号槽实现机制
signals2 基于Boost里的另一个库signals,实现了线程安全的观察者模式.它是一种函数回调机制,当一个信号关联了多个槽时,信号发出,这些槽将会被调用.google的base库里用的多的模 ...
- QT Core | 信号槽03 - 自定义信号与槽
文章目录 一.前言 二.新建一个QT控制台项目 2.1.New File or Project 2.2.Project Location 2.3.Define Build System 2.4.Kit ...
- QT Core | 信号槽02 - GUI上按钮触发应用程序的函数(lambda表达式)
文章目录 一.前言 二.新建一个QT项目 2.1.New File or Project 2.2.Location 2.3.Kit 2.4.Detail 2.5.Summary 2.6.工程 2.7. ...
- QT Core | 信号槽01 - GUI上按钮触发应用程序里某个类的函数
文章目录 一.前言 二.新建一个QT项目 2.1.New File or Project 2.2.Location 2.3.Kits 2.4.Details 2.5.汇总 2.6.项目文件 2.7.p ...
最新文章
- 未来的全能保姆机器人作文_保姆机器人作文500字
- python matplotlab.pyplot.scatter() 函数的用法
- 两个Double相加,小数点有很多位问题
- java制作安卓客户端_制作网页的Android客户端(一)
- PHP 判断用户语言跳转网页
- C/c++ http请求
- java 中文字符串 排序_Java实现对中文字符串的排序功能实例代码
- python3实现json转excel
- 计算机表格做八折怎么辛,五笔字根表口诀.doc
- 深度linux系统怎么安装软件
- 香港流行乐黄金二十年——经典歌手(音乐人)全面回顾(四)
- Selenium 元素定位
- 老程序员告诉你人工智能工程师与Python工程师有什么区别?
- SpringCloud与微服务Ⅷ --- Hystrix断路器
- 如何用 Node.js 爬虫?
- 计算机硬件知识总结,计算机硬件知识总结(二)
- 校园就业季落幕:大数据就业不愁 养老人才抢手
- FFmpeg基本使用
- excel 文件工作表保护密码破解
- 美国 转专业 计算机,​转专业申请计算机硕士,美国这些学校供你选择