惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Troy Hunt's Blog
P
Palo Alto Networks Blog
N
News and Events Feed by Topic
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Threatpost
C
Cyber Attacks, Cyber Crime and Cyber Security
S
Schneier on Security
Google Online Security Blog
Google Online Security Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题
量子位
L
Lohrmann on Cybersecurity
酷 壳 – CoolShell
酷 壳 – CoolShell
Attack and Defense Labs
Attack and Defense Labs
Y
Y Combinator Blog
Project Zero
Project Zero
AWS News Blog
AWS News Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
博客园 - 聂微东
MyScale Blog
MyScale Blog
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Securelist
Latest news
Latest news
C
CXSECURITY Database RSS Feed - CXSecurity.com
B
Blog RSS Feed
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
Recent Announcements
Recent Announcements
V2EX - 技术
V2EX - 技术
Schneier on Security
Schneier on Security
F
Full Disclosure
Apple Machine Learning Research
Apple Machine Learning Research
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Proofpoint News Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
月光博客
月光博客
L
LINUX DO - 最新话题
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
H
Heimdal Security Blog
F
Fortinet All Blogs
博客园_首页
N
News | PayPal Newsroom
P
Proofpoint News Feed

博客园 - ®Geovin Du Dream Park™

go: Functional Options Pattern go:Timing Functions Pattern python: Timing Functions Pattern go: Steady-State Pattern python: Steady-State Pattern go: Handshaking Pattern python: Handshaking Pattern go: Fail-Fast Pattern python: Fail-Fast Pattern I go: Deadline Pattern python: Deadline Pattern go: Circuit-Breaker Pattern python: Circuit-Breaker Pattern go: Bulkheads Pattern python: Bulkheads Pattern go: Push & Pull Pattern python: Push & Pull Pattern python: Publish/Subscribe Pattern II go: Publish/Subscribe Pattern python: Publish/Subscribe Pattern go: Futures & Promises Pattern python: Futures & Promises Pattern go: Worker Pool Pattern go:Pipeline Pattern python: Worker Pool Pattern python: Pipeline Pattern go: Fan-Out Pattern python: Fan-Out Pattern go: Fan-In Pattern python: Fan-In Pattern Fan-In go: Producer Consumer  Pattern python: Producer Consumer Pattern go: Parallelism Pattern python: Parallelism Pattern go: Reactor Pattern go: Generators Pattern python: speech to text offline python: Generators Pattern go: Coroutines Pattern python:Coroutines Pattern go: Broadcast Pattern python: Broadcast Pattern python: Bounded Parallelism Pattern go: Bounded Parallelism Pattern python: N-Barrier Pattern go: N-Barrier Pattern python: Semaphore Pattern go: Semaphore Pattern python: Read-Write Lock Pattern go: Read-Write Lock Pattern python: Monitor Pattern go: Monitor Pattern python: Mutex Pattern go: Lock/Mutex Pattern Python: Condition Variable Pattern go:Condition Variable Pattern python: Registry Pattern python: Interpreter Pattern go: Interpreter Pattern go: Registry Pattern go: Memento Pattern go: Command Pattern go: State Pattern go:Template Method Pattern go: Strategy Pattern go: Visitor Pattern go: Observer Pattern go: Mediator Pattern go: Iterator Pattern go: Chain of Responsibility Pattern go: Proxy Pattern go:Decorator Pattern go: Facade Pattern go: Flyweight Pattern go: Composite Pattern go: Singleton Pattern go: Prototype Pattern go: Bridge Pattern go: Adapter Pattern go: Builder Pattern 密码进行加盐哈希 using CSharp,Python,Go,Java go: Abstract Factory Pattern go: Model,Interface,DAL ,Factory,BLL using mysql go: Simple Factory Pattern go: Factory Method Pattern go: goLang 在Windows环境搭建Go语言开发环境 CSharp: Parallel Extensions cpp: class python: 蝴蝶跟随鼠标 javascript: 中国历史人物热力分布图using echart javascript: 中国历史人物热力图 python: 初养龙虾微信纯文字自动回复using workBuddy python: object 入门 python: Factory Method Pattern python: Simple Factory Pattern python: Abstract Factory Pattern 区域化 代码 python: Null Object Pattern python: Builder Pattern python: Adapter Pattern
python: Reactor Pattern
®Geovin Du Dream Park™ · 2026-06-15 · via 博客园 - ®Geovin Du Dream Park™

项目结构:

image

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:49 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : constants.py

from enum import Enum

class BusinessEventType(Enum):
    """
    珠宝行业全部业务事件类型枚举,统一管理
    """
    RAW_MATERIAL = "raw_material"      # 原料采购验收
    PROCESS_CHECK = "process_check"    # 加工质检
    STORE_SALE = "sale"                # 门店销售结算
    AFTER_SALE_REPAIR = "repair"       # 售后维修
    INVENTORY_CHECK = "inventory"      # 库存盘点



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:49 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : exceptions.py

class HandlerNotFoundError(Exception):
    """
    事件无对应处理器异常
    """
    pass

class InvalidEventDataError(Exception):
    """
    事件请求数据非法异常
    """
    pass


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:50 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : logger.py

import logging
import sys

def get_logger(name: str = "jewelry_reactor") -> logging.Logger:
    """

    :param name:
    :return:
    """
    logger = logging.getLogger(name)
    logger.setLevel(logging.INFO)
    if not logger.handlers:
        fmt = logging.Formatter("[%(asctime)s] [%(levelname)s] %(message)s", "%Y-%m-%d %H:%M:%S")
        sh = logging.StreamHandler(sys.stdout)
        sh.setFormatter(fmt)
        logger.addHandler(sh)
    return logger


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:53 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : base_handler.py
from abc import ABC, abstractmethod
from ReactorPattern.event import BusinessEvent

class BaseHandler(ABC):
    """
    所有业务处理器抽象基类,统一规范接口
    """
    @abstractmethod
    def handle(self, event: BusinessEvent) -> None:
        """
        处理对应业务事件
        :param event:
        :return:
        """
        pass



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:54 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : material_handler.py
from .base_handler import BaseHandler
from ReactorPattern.event import BusinessEvent
from ReactorPattern.common import get_logger

logger = get_logger("material_handler")

class MaterialAcceptHandler(BaseHandler):
    """
    原料采购
    """
    def handle(self, event: BusinessEvent) -> None:
        """

        :param event:
        :return:
        """
        payload = event.payload
        mat_type = payload["material_type"]
        purity = payload["purity"]
        weight = payload["weight"]
        logger.info(f"===== 原料采购验收业务开始 =====")
        logger.info(f"原料:{mat_type} | 纯度:{purity} | 重量:{weight}g")
        logger.info(f"{mat_type}原料验收合格,入库完成")



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:56 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : process_handler.py
from .base_handler import BaseHandler
from ReactorPattern.event import BusinessEvent
from ReactorPattern.common import get_logger

logger = get_logger("process_handler")

class ProcessCheckHandler(BaseHandler):
    """
    加工质检
    """
    def handle(self, event: BusinessEvent) -> None:
        """

        :param event:
        :return:
        """
        payload = event.payload
        style = payload["style"]
        cert_no = payload["cert_no"]
        craft = payload["craft"]
        logger.info(f"===== 珠宝加工质检业务开始 =====")
        logger.info(f"款式:{style} | GIA证书号:{cert_no} | 工艺标准:{craft}")
        logger.info(f"{style}工艺、证书全部合规,成品入库")



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:57 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : sale_handler.py
from .base_handler import BaseHandler
from ReactorPattern.event import BusinessEvent
from ReactorPattern.common import get_logger

logger = get_logger("sale_handler")

class StoreSaleHandler(BaseHandler):
    """
    门店销售结算
    """
    def handle(self, event: BusinessEvent) -> None:
        """

        :param event:
        :return:
        """
        payload = event.payload
        product = payload["product_name"]
        price = payload["unit_price"]
        qty = payload["quantity"]
        order_id = payload["order_id"]
        total = price * qty
        logger.info(f"===== 门店销售结算业务开始 =====")
        logger.info(f"商品:{product} | 单价:{price}元 | 数量:{qty}件")
        logger.info(f"订单{order_id},结算总价:{total}元,销售完成")



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:58 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : repair_handler.py
from .base_handler import BaseHandler
from ReactorPattern.event import BusinessEvent
from ReactorPattern.common import get_logger

logger = get_logger("repair_handler")

class AfterSaleRepairHandler(BaseHandler):
    """
    售后维修
    """
    def handle(self, event: BusinessEvent) -> None:
        """

        :param event:
        :return:
        """
        payload = event.payload
        customer = payload["customer_name"]
        jewel = payload["jewelry_name"]
        item = payload["repair_item"]
        logger.info(f"===== 售后维修业务开始 =====")
        logger.info(f"客户:{customer} | 饰品:{jewel} | 维修项目:{item}")
        logger.info(f"{item}服务完工,客户可取件")



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 20:59 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : inventory_handler.py
from .base_handler import BaseHandler
from ReactorPattern.event import BusinessEvent
from ReactorPattern.common import get_logger

logger = get_logger("inventory_handler")

class InventoryCheckHandler(BaseHandler):
    """
    库存盘点
    """
    def handle(self, event: BusinessEvent) -> None:
        """

        :param event:
        :return:
        """
        payload = event.payload
        inv_type = payload["inventory_type"]
        total_num = payload["total_num"]
        total_val = payload["total_value"]
        logger.info(f"===== 库存盘点业务开始 =====")
        logger.info(f"盘点类目:{inv_type} | 在库总数:{total_num}件 | 库存总价值:{total_val}万元")
        logger.info(f"账实核对一致,库存台账更新完成")
# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 21:00 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : demultiplexer.py

from typing import Dict
from ReactorPattern.common import BusinessEventType, HandlerNotFoundError
from ReactorPattern.handler import BaseHandler

class EventDemultiplexer:
    """
    事件分离器:维护事件类型与处理器映射,负责匹配分发
    """
    def __init__(self):
        self._handler_map: Dict[BusinessEventType, BaseHandler] = {}

    def register_handler(self, event_type: BusinessEventType, handler: BaseHandler) -> None:
        """
        注册事件与处理器绑定关系,扩展新增业务只需要注册
        :param event_type:
        :param handler:
        :return:
        """
        self._handler_map[event_type] = handler

    def get_handler(self, event_type: BusinessEventType) -> BaseHandler:
        """
        根据事件类型查找对应处理器,无则抛异常
        :param event_type:
        :return:
        """
        if event_type not in self._handler_map:
            raise HandlerNotFoundError(f"未注册处理器:{event_type.value}")
        return self._handler_map[event_type]


# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 21:02 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : reactor_core.py
from ReactorPattern.event import BusinessEvent
from ReactorPattern.reactor import EventDemultiplexer
from ReactorPattern.common import get_logger

logger = get_logger("reactor_core")

class JewelryReactor:
    """
    珠宝行业Reactor反应器,统一接收并发事件、调用分离器分发
    """
    def __init__(self, demultiplexer: EventDemultiplexer):
        self._demux = demultiplexer

    def dispatch(self, event: BusinessEvent) -> None:
        """
        对外统一入口:接收任意业务事件,自动分发处理
        :param event:
        :return:
        """
        logger.info(f"Reactor收到业务事件:{event.event_type.value}")
        handler = self._demux.get_handler(event.event_type)
        handler.handle(event)



# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 21:05 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : app.py
from .common import BusinessEventType, get_logger
from .event import BusinessEvent
from .reactor import EventDemultiplexer, JewelryReactor
from .handler import (
    MaterialAcceptHandler,
    ProcessCheckHandler,
    StoreSaleHandler,
    AfterSaleRepairHandler,
    InventoryCheckHandler
)

logger = get_logger("app")

def build_reactor() -> JewelryReactor:
    """
    依赖组装:统一注册所有业务处理器,工厂化构建Reactor
    :return:
    """
    demux = EventDemultiplexer()
    # 注册所有珠宝业务处理器
    demux.register_handler(BusinessEventType.RAW_MATERIAL, MaterialAcceptHandler())
    demux.register_handler(BusinessEventType.PROCESS_CHECK, ProcessCheckHandler())
    demux.register_handler(BusinessEventType.STORE_SALE, StoreSaleHandler())
    demux.register_handler(BusinessEventType.AFTER_SALE_REPAIR, AfterSaleRepairHandler())
    demux.register_handler(BusinessEventType.INVENTORY_CHECK, InventoryCheckHandler())
    reactor = JewelryReactor(demultiplexer=demux)
    return reactor

def simulate_concurrent_business_requests(reactor: JewelryReactor):
    """
    模拟多并发业务请求,统一封装为标准Event对象送入Reactor
    :param reactor:
    :return:
    """
    event_list = [
        BusinessEvent(
            event_type=BusinessEventType.RAW_MATERIAL,
            payload={"material_type": "足金999", "purity": "99.9%", "weight": 800}
        ),
        BusinessEvent(
            event_type=BusinessEventType.PROCESS_CHECK,
            payload={"style": "1克拉钻戒", "cert_no": "GIA987654321", "craft": "微镶精工"}
        ),
        BusinessEvent(
            event_type=BusinessEventType.STORE_SALE,
            payload={"product_name": "古法传承金镯", "unit_price": 15680, "quantity": 1, "order_id": "JEW20260615001"}
        ),
        BusinessEvent(
            event_type=BusinessEventType.AFTER_SALE_REPAIR,
            payload={"customer_name": "李女士", "jewelry_name": "18K金项链", "repair_item": "断裂焊接+抛光翻新"}
        ),
        BusinessEvent(
            event_type=BusinessEventType.INVENTORY_CHECK,
            payload={"inventory_type": "钻石成品库存", "total_num": 1680, "total_value": 12600}
        )
    ]
    # 循环推送所有并发事件给Reactor分发
    for evt in event_list:
        reactor.dispatch(evt)

调用:

# encoding: utf-8 
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Reactor  Pattern 反应器模式
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2024.3.6 python 3.11
# os        : windows 10
# database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
# Datetime  : 2026/6/15 21:07 
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : ReactorBll.py
from ReactorPattern.common import get_logger
from ReactorPattern.reactor import JewelryReactor
from ReactorPattern.app import build_reactor, simulate_concurrent_business_requests

logger = get_logger("ReactorBll")

class ReactorBll(object):
    """
    Reactor 业务逻辑封装层
    对外提供统一调用入口,隐藏内部构建、分发、调度细节
    """
    def __init__(self):
        # 内部初始化 Reactor 实例(一次创建,多次复用)
        self._reactor: JewelryReactor = build_reactor()

    def demo(self):
        """
        对外演示方法:一键执行全套珠宝行业并发业务流程
        :return: None
        """
        logger.info("========== ReactorBll.demo() 开始执行 ==========")
        # 执行并发业务模拟
        simulate_concurrent_business_requests(self._reactor)
        logger.info("========== ReactorBll.demo() 执行完成 ==========")

    def get_reactor(self) -> JewelryReactor:
        """
        提供内部 reactor 实例,方便外部扩展调用(可选)
        """
        return self._reactor

输出:

image

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)