当前位置: 首页 > news >正文

python: Fan-In Pattern Fan-In

项目结构:

Fan-In 模式本质:多数据源 → 统一接收器,完美匹配珠宝全流程「多环节、单数据中心」场景
架构设计
核心分层(5 层架构)
配置层(config):全局配置、常量
消息层(message):统一消息结构体、数据格式
业务层(process):各业务模块(单一职责)
核心层(core):Fan-In 队列、Sink 接收器、线程管理
启动层(main):项目入口、编排启动

# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 20:47 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : settings.py """ 全局配置文件 """ import queue # 队列最大容量 QUEUE_MAX_SIZE = 100 # 全局 Fan-In 队列(单例) FAN_IN_QUEUE = queue.Queue(maxsize=QUEUE_MAX_SIZE) # 业务处理模拟时间范围(秒) PROCESS_MIN_TIME = 0.3 PROCESS_MAX_TIME = 1.2 # 结束标识 END_SIGNAL = "SYSTEM_END" # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 20:47 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : business_msg.py """ 统一业务消息结构体(企业级数据格式) """ from dataclasses import dataclass from typing import Any @dataclass class BusinessMessage: """ 珠宝全流程统一消息体 严格结构化:所有业务环节必须使用此格式发送数据 """ process_name: str # 业务环节名称 task_name: str # 任务名称 task_details: Any # 任务详情 timestamp: float # 时间戳 status: str = "success" # 状态 # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 20:48 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : fan_in_queue.py """ Fan-In 核心队列:线程安全、单例、全局唯一 """ from FanInPattern.config.settings import FAN_IN_QUEUE, END_SIGNAL from FanInPattern.message.business_msg import BusinessMessage class FanInQueue: """ Fan-In 队列封装(企业级安全调用) """ @staticmethod def send_msg(msg: BusinessMessage) -> None: """ 发送业务消息 :param msg: :return: """ FAN_IN_QUEUE.put(msg) @staticmethod def get_msg() -> BusinessMessage | str: """ 获取消息(阻塞) :return: """ return FAN_IN_QUEUE.get() @staticmethod def send_end_signal() -> None: """ 发送结束信号 :return: """ FAN_IN_QUEUE.put(END_SIGNAL) @staticmethod def task_done() -> None: """ 任务完成标识 :return: """ FAN_IN_QUEUE.task_done() @staticmethod def join() -> None: """ 等待队列清空 :return: """ FAN_IN_QUEUE.join() # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式: # 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/19 20:50 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : work_sink.py """ 工作接收器:数据中心(唯一汇聚点) """ import threading import time from FanInPattern.config.settings import END_SIGNAL from FanInPattern.core.fan_in_queue import FanInQueue from FanInPattern.message.business_msg import BusinessMessage class WorkSink: """ 珠宝业务数据中心(Fan-In Sink) """ def __init__(self): self.total_count = 0 self.process_stats = {} # 各环节统计 def _update_stats(self, process_name: str) -> None: """ 更新业务统计 :param process_name: :return: """ self.process_stats[process_name] = self.process_stats.get(process_name, 0) + 1 def run(self) -> None: """ 启动接收器 :return: """ print("=" * 90) print("🏢 【企业级】珠宝业务数据中心已启动 - Fan-In 工作接收器") print("=" * 90) while True: data = FanInQueue.get_msg() # 结束信号 if data == END_SIGNAL: self._print_final_report() FanInQueue.task_done() break # 处理业务消息 if isinstance(data, BusinessMessage): self._handle_message(data) FanInQueue.task_done() time.sleep(0.1) def _handle_message(self, msg: BusinessMessage) -> None: """ 处理单条消息 :param msg: :return: """ self.total_count += 1 self._update_stats(msg.process_name) print( f"📊 接收 | {msg.process_name:10s} | " f"任务:{msg.task_name:15s} | 状态:{msg.status}" ) def _print_final_report(self) -> None: """ 打印企业级汇总报告 :return: """ print("\n" + "=" * 90) print("📈 珠宝全流程业务汇总报告") print("=" * 90) print(f"✅ 总处理任务数:{self.total_count}") for process, count in self.process_stats.items(): print(f" 「{process}」:{count} 项") print("=" * 90) # 单例接收器(全局唯一) SINK_INSTANCE = WorkSink()
# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式: # 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/19 20:52 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : base_process.py """ 业务基类:所有业务环节必须继承此类 """ import abc import time import random import threading from FanInPattern.config.settings import PROCESS_MIN_TIME, PROCESS_MAX_TIME from FanInPattern.core.fan_in_queue import FanInQueue from FanInPattern.message.business_msg import BusinessMessage class BaseProcess(abc.ABC): """ 抽象业务基类 职责:统一执行逻辑、发送消息、模拟耗时 """ def __init__(self, process_name: str): self.process_name = process_name self.task_list = [] @abc.abstractmethod def init_tasks(self) -> None: """ 初始化任务(子类必须实现) :return: """ pass def _simulate_process(self) -> None: """ 模拟业务处理耗时 :return: """ sleep_time = random.uniform(PROCESS_MIN_TIME, PROCESS_MAX_TIME) time.sleep(sleep_time) def _send_task_msg(self, task: str) -> None: """ 构造并发送消息 :param task: :return: """ msg = BusinessMessage( process_name=self.process_name, task_name=task, task_details=task, timestamp=time.time() ) FanInQueue.send_msg(msg) def execute(self) -> None: """ 执行业务流程 :return: """ self.init_tasks() for task in self.task_list: self._simulate_process() self._send_task_msg(task) def start_thread(self) -> threading.Thread: """ 启动独立线程执行 :return: """ thread = threading.Thread(target=self.execute, name=self.process_name) thread.start() return thread # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式: # 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/19 21:09 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : design.py from FanInPattern.process.base_process import BaseProcess class DesignProcess(BaseProcess): """ 珠宝设计 """ def __init__(self): super().__init__("珠宝设计") def init_tasks(self): """ :return: """ self.task_list = ["钻戒款式设计", "项链3D建模", "手镯图纸审核"] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式: # 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/19 21:11 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : purchase.py from FanInPattern.process.base_process import BaseProcess class PurchaseProcess(BaseProcess): """ 原料采购 """ def __init__(self): super().__init__("原料采购") def init_tasks(self): """ :return: """ self.task_list = [ "采购1克拉南非钻石", "采购999足金500g", "采购红宝石10颗" ] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: # 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/19 21:23 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : produce.py from FanInPattern.process.base_process import BaseProcess class ProduceProcess(BaseProcess): """ 生产加工 """ def __init__(self): super().__init__("生产加工") def init_tasks(self): """ :return: """ self.task_list = ["钻石镶嵌加工", "黄金手镯抛光", "金饰铸造成型"] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 21:26 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : quality.py from FanInPattern.process.base_process import BaseProcess class QualityProcess(BaseProcess): """ 质量检测 """ def __init__(self): super().__init__("质量检测") def init_tasks(self): self.task_list = ["黄金纯度检测", "钻石工艺检测", "珠宝鉴定证书出具"] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 21:28 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : warehouse.py from FanInPattern.process.base_process import BaseProcess class WarehouseProcess(BaseProcess): """ 仓储管理 """ def __init__(self): super().__init__("仓储管理") def init_tasks(self): self.task_list = ["钻戒入库登记", "黄金库存盘点", "宝石库存预警"] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 21:28 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : sale.py from FanInPattern.process.base_process import BaseProcess class SaleProcess(BaseProcess): """ 销售环节 """ def __init__(self): super().__init__("销售环节") def init_tasks(self): self.task_list = ["线上钻戒售出", "门店黄金手镯售出", "珠宝批发订单发货"] # encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述:Fan-In Pattern Fan-In(扇入)模式 # 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/19 21:29 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : after_sale.py from FanInPattern.process.base_process import BaseProcess class AfterSaleProcess(BaseProcess): """ 售后服务 """ def __init__(self): super().__init__("售后服务") def init_tasks(self): self.task_list = ["钻戒免费清洗", "项链维修", "黄金首饰保养"]

调用:

# encoding: utf-8 # 版权所有 2026 ©涂聚文有限公司™ ® # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎 # 描述: Fan-In Pattern Fan-In(扇入)模式 # 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/19 21:51 # User : geovindu # Product : PyCharm # Project : pydesginpattern # File : FanInBll.py """ 企业级编排 """ import threading from FanInPattern.core.fan_in_queue import FanInQueue from FanInPattern.core.work_sink import SINK_INSTANCE # 导入所有业务流程 from FanInPattern.process.purchase import PurchaseProcess from FanInPattern.process.design import DesignProcess from FanInPattern.process.produce import ProduceProcess from FanInPattern.process.quality import QualityProcess from FanInPattern.process.warehouse import WarehouseProcess from FanInPattern.process.sale import SaleProcess from FanInPattern.process.after_sale import AfterSaleProcess class JewelryBusinessOrchestration(object): """ 业务流程编排器 """ @staticmethod def get_all_processes() -> list: """ 获取所有业务环节(扩展只需在此添加) :return: """ return [ PurchaseProcess(), DesignProcess(), ProduceProcess(), QualityProcess(), WarehouseProcess(), SaleProcess(), AfterSaleProcess() ] @staticmethod def run(): """启动全流程""" # 1. 启动接收器线程 sink_thread = threading.Thread(target=SINK_INSTANCE.run, name="WorkSink") sink_thread.start() # 2. 启动所有业务线程 processes = JewelryBusinessOrchestration.get_all_processes() threads = [p.start_thread() for p in processes] # 3. 等待所有业务完成 for t in threads: t.join() # 4. 发送结束信号 FanInQueue.send_end_signal() # 5. 等待队列处理完成 FanInQueue.join() sink_thread.join() class FanInBll(object): """ """ def demo(self): """ :return: """ print("🚀 企业级珠宝 Fan-In 业务系统启动...\n") JewelryBusinessOrchestration.run() print("\n🎉 系统全部执行完成!")

http://www.jsqmd.com/news/1045495/

相关文章:

  • ComfyUI-LTXVideo进阶攻略:从入门到精通的AI视频创作工具箱
  • 2026深圳漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • 地理坐标转换实战:将全球经度数据从0-360映射到-180-180
  • Adobe-GenP:释放创意生产力的智能激活解决方案
  • ATE测试—新手入门学习(二)【6-10】
  • 从IEEE Access到中文核心:我的双轨制论文发表实战复盘
  • 2026年更新聚焦:西安雁塔区诚信一站式婚礼服务会所选择之道 - 品牌鉴赏官2026
  • 流量管理进阶
  • MC68HC908AS32A内存架构解析:RAM、EEPROM与FLASH实战管理
  • Dism++:Windows系统优化与维护的终极指南
  • 2026体系认证哪家通过率高?关键选择因素解析 - 品牌排行榜
  • 红队内网渗透利器,告别原版特征暴露(支持免杀)内网扫描爆破后渗透一站式落地
  • Spring Boot YAML 配置陷阱
  • 【无人机三维路径规划】基于磷虾群算法KH实现复杂地形下无人机避障三维航迹规划附Matlab代码
  • 芯片数据手册修订历史深度解析:从MPC5676R看硬件设计关键要点
  • 如何安全永久激活IDM:3种高效方案完整指南
  • 从零到一:使用PowerDesigner构建高效数据库物理模型
  • 第四章:动态WebAPI开发
  • AI在生物学研究中的真实能力边界与辅助实践
  • 软件价格优化中的动态定价模型
  • 宜春探店 10 家猫犬舍!避坑指南 + Top1 实探,这家 3000㎡基地太放心​ - 同城宠物优选基地
  • 从评估板到产品:WINC1500-XPRO物联网Wi-Fi模块开发全解析
  • LPC43S70 ADC信号完整性优化:从引脚串扰到输入电路设计
  • 赣州购宠避雷!实测 10 家猫犬舍,拒绝星期狗,这家 3000㎡基地才靠谱​ - 同城宠物优选基地
  • 智能功率开关MC07XS6517:输出钳位与数字诊断功能深度解析
  • 2026专业产品认证机构哪家靠谱?资质与服务解析 - 品牌排行榜
  • DeepTutor终极指南:打造您的个人AI学习助手
  • 第六章:数据库操作与EF Core集成
  • 2026漳州2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • 2026北京靠谱的上门回收字画公司推荐榜单 - 品牌排行榜