Python编程:实现消息发布/订阅模型

简介: Python编程:实现消息发布/订阅模型

基本模型:

发布者 -> 交换机 <-> 订阅者

代码示例

# -*- coding: utf-8 -*-


# 消息发布/订阅模型

from collections import defaultdict
from contextlib import contextmanager


class Exchange(object):
def __init__(self):
self._subscribers = set()

def attach(self, task):
self._subscribers.add(task)

def detach(self, task):
self._subscribers.remove(task)

def send(self, message):
for subscriber in self._subscribers:
subscriber.send(message)

@contextmanager
def subscribe(self, *tasks):
for task in tasks:
self.attach(task)
try:
yield
finally:
for task in tasks:
self.detach(task)


_exchanges = defaultdict(Exchange)


def get_exchange(name):
return _exchanges[name]


class Task(object):
def send(self, message):
"""发送消息的方法"""
print(message)


task1 = Task()
task2 = Task()


# 1、手动 添加注册,取消注册
exchage = get_exchange("message")
exchage.attach(task1)
exchage.attach(task2)

exchage = get_exchange("message")
exchage.send("你好")
# 你好
# 你好

exchage.detach(task1)
exchage.detach(task2)

# 2、使用上下文管理器

exchage = get_exchange("message")
with exchage.subscribe(task1, task2):
exchage.send("你好啊")

# 你好啊
# 你好啊

参考

12.11 实现消息发布/订阅模型

            </div>
目录
相关文章
|
1月前
|
XML Java 数据库连接
MyBatis Plus 核心功能与用法
MyBatis Plus 是基于 MyBatis 的增强工具,简化单表 CRUD 操作。通过继承 BaseMapper 即可实现增删改查,支持条件构造器、分页、逻辑删除、自动填充、乐观锁等高级功能,大幅提升开发效率,无需编写冗余 SQL 与 XML,助力快速构建 Spring Boot 应用。
177 0
|
5月前
|
SQL 人工智能 安全
深度复盘MCP安全风暴:一个工单如何演变成数据库“特洛伊木马”危机?
近期,安全公司 General Analysis 披露的MCP安全漏洞在技术圈引发了巨大震动。这个"特洛伊木马"式的安全漏洞暴露了一个现实:AI时代,传统的数据库访问方式已经无法满足安全需求。阿里云数据管理DMS新推出的DMS MCP Server,正是为AI时代的数据库安全访问而生,它不仅完美解决了传统MCP的安全隐患,更为企业提供了一个安全、智能、高效的数据访问新范式。
536 5
|
7月前
|
SQL 人工智能 数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
556 0
SQL Server 2025 - 从本地到云端的 AI 就绪企业数据库
|
人工智能 数据可视化 数据处理
告别编码难题,低代码平台让应用开发更简单!#高效开发
在数字化时代,低代码平台JeeLowCode为企业提供高效、低成本的应用开发解决方案。通过可视化开发、高效数据处理、强大的技术核心和AI智能辅助,该平台显著降低了开发门槛,支持多人协作和快速部署,全面加速企业的数字化转型。官网:http://www.jeelowcode.com,源码:https://gitee.com/jeelowecode/JeeLowCode。
|
存储 Linux 虚拟化
超详细!VMware虚拟机迁移操作教程
为VMware虚拟机迁移提供从0到1的详尽操作指导
1682 0
超详细!VMware虚拟机迁移操作教程
|
存储 监控 算法
一次通过dump文件分析OutOfMemoryError异常代码定位过程
OutOfMemoryError是Java程序中常见的异常,通常出现在内存不足时,导致程序无法运行。借助MAT内存分析工具分析可能的内存泄漏代码问题定位。
572 1
一次通过dump文件分析OutOfMemoryError异常代码定位过程
|
机器学习/深度学习 人工智能 监控
一文读懂deepSpeed:深度学习训练的并行化
DeepSpeed 是由微软开发的开源深度学习优化库,旨在提高大规模模型训练的效率和可扩展性。通过创新的并行化策略、内存优化技术(如 ZeRO)及混合精度训练,DeepSpeed 显著提升了训练速度并降低了资源需求。它支持多种并行方法,包括数据并行、模型并行和流水线并行,同时与 PyTorch 等主流框架无缝集成,提供了易用的 API 和丰富的文档支持。DeepSpeed 不仅大幅减少了内存占用,还通过自动混合精度训练提高了计算效率,降低了能耗。其开源特性促进了 AI 行业的整体进步,使得更多研究者和开发者能够利用先进优化技术,推动了 AI 在各个领域的广泛应用。
|
Linux 开发工具 索引
基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
2159 0
|
算法 C++
探索最小生成树:连通世界的最短纽带
生活中,我们常常需要在一组地点之间建立联系,这些联系可能是道路、管道、电缆等。然而,资源有限,成本宝贵。在这种情况下,如何以最小的代价将这些地点连接起来,成为了一个关键问题。这就引出了图论中的一个重要概念:最小生成树(Minimum Spanning Tree,MST)。本文将通过一个日常生活的案例,详细探讨最小生成树的概念、应用。
213 0
|
XML JSON 监控
《李斌的笔记》SAP 全部文章目录、快速导航、持续更新
我把自己的全部文章都整理成目录,放在这篇文章中以实现快速导航,这样更方便阅读,本章内容持续更新。
613 0

热门文章

最新文章