python: Futures & Promises Pattern

项目结构:

# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:35
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : order_state.py
from enum import Enum
 
class OrderState(Enum):
    """
 
    """
    CREATED = "已创建"
    PURCHASING = "采购中"
    PURCHASED = "采购完成"
    DESIGNING = "设计中"
    DESIGNED = "设计完成"
    MANUFACTURING = "加工中"
    MANUFACTURED = "加工完成"
    QUALITY_CHECKING = "质检中"
    QUALIFIED = "质检通过"
    STORING = "入库中"
    COMPLETED = "全部完成"
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:36
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : base_task.py
from abc import ABC, abstractmethod
 
class ITask(ABC):
    """
 
    """
    @abstractmethod
    def execute(self, *args, **kwargs):
        """
        执行任务,返回结果(Promise 实现)
        :param args:
        :param kwargs:
        :return:
        """
        pass
 
    @abstractmethod
    def get_name(self) -> str:
        """
        任务名称
        :return:
        """
        pass
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:37
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : logger.py
import logging
 
def get_logger(name: str):
    """
 
    :param name:
    :return:
    """
    logger = logging.getLogger(name)
    logger.setLevel(logging.INFO)
 
    # 避免重复打印
    logger.handlers.clear()
 
    # 格式:时间 级别 信息
    formatter = logging.Formatter("[%(asctime)s] %(levelname)s %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
 
    # 控制台输出
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)
    logger.addHandler(console_handler)
 
    # 关闭传递,防止重复打印
    logger.propagate = False
    return logger

# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:37
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : purchase_task.py
from FuturesPromisesPattern.core.base_task import ITask
from FuturesPromisesPattern.utils.logger import get_logger
import time
 
logger = get_logger("PurchaseTask")
 
class PurchaseTask(ITask):
    """
    任务层(所有 Promise 实现)
    """
    def execute(self):
        logger.info("开始采购 1克拉 GIA 裸石...")
        time.sleep(2)
        result = "1克拉GIA裸石"
        logger.info(f"采购完成:{result}")
        return result
 
    def get_name(self):
        return "采购任务"
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:39
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : design_task.py
from FuturesPromisesPattern.core.base_task import ITask
from FuturesPromisesPattern.utils.logger import get_logger
import time
 
logger = get_logger("DesignTask")
 
class DesignTask(ITask):
    """
   任务层(所有 Promise 实现)
    """
    def execute(self, stone):
        logger.info(f"根据裸石【{stone}】开始3D设计...")
        time.sleep(1)
        result = "钻戒3D设计图纸"
        logger.info(f"设计完成:{result}")
        return result
 
    def get_name(self):
        return "设计任务"
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:40
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : manufacture_task.py
from FuturesPromisesPattern.core.base_task import ITask
from FuturesPromisesPattern.utils.logger import get_logger
import time
 
logger = get_logger("ManufactureTask")
 
class ManufactureTask(ITask):
    """
    任务层(所有 Promise 实现)
    """
    def execute(self, stone, design):
        logger.info(f"加工:{stone} + {design}")
        time.sleep(3)
        result = "1克拉定制钻戒成品"
        logger.info(f"加工完成:{result}")
        return result
 
    def get_name(self):
        return "加工任务"
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:41
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : quality_task.py
from FuturesPromisesPattern.core.base_task import ITask
from FuturesPromisesPattern.utils.logger import get_logger
import time
 
logger = get_logger("QualityTask")
 
class QualityCheckTask(ITask):
    """
    任务层(所有 Promise 实现)
    """
    def execute(self, ring):
        logger.info(f"质检:{ring}")
        time.sleep(1)
        logger.info("质检通过")
        return ring
 
    def get_name(self):
        return "质检任务"
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:42
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : storage_task.py
from FuturesPromisesPattern.core.base_task import ITask
from FuturesPromisesPattern.utils.logger import get_logger
import time
 
logger = get_logger("StorageTask")
 
class StorageTask(ITask):
    """
    任务层(所有 Promise 实现)
    """
    def execute(self, ring):
        logger.info(f"入库:{ring}")
        time.sleep(1)
        result = f"可销售:{ring}"
        logger.info(f"入库完成:{result}")
        return result
 
    def get_name(self):
        return "入库任务"
 
 
 
# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:43
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : process_service.py
from concurrent.futures import ThreadPoolExecutor
from FuturesPromisesPattern.core.order_state import OrderState
from FuturesPromisesPattern.utils.logger import get_logger
 
logger = get_logger("ProcessService")
 
class JewelryProcessService:
    """
    服务层(流程编排 = Future 链式调度)
    """
 
    def __init__(self, executor: ThreadPoolExecutor):
        self.executor = executor
        self.state = OrderState.CREATED
        logger.info(f"订单已创建 | 状态:{self.state.value}")
 
    def update_state(self, new_state: OrderState):
        self.state = new_state
        logger.info(f"状态更新 → {self.state.value}")
 
    # ========== 链式异步流程(Future + Promise 核心)==========
    def start_full_process(self, purchase, design, manufacture, quality, storage):
        # Step1: 采购 → Future
        self.update_state(OrderState.PURCHASING)
        future_stone = self.executor.submit(purchase.execute)
        stone = future_stone.result()
        self.update_state(OrderState.PURCHASED)
 
        # Step2: 设计
        self.update_state(OrderState.DESIGNING)
        future_design = self.executor.submit(design.execute, stone)
        design_out = future_design.result()
        self.update_state(OrderState.DESIGNED)
 
        # Step3: 加工
        self.update_state(OrderState.MANUFACTURING)
        future_product = self.executor.submit(manufacture.execute, stone, design_out)
        product = future_product.result()
        self.update_state(OrderState.MANUFACTURED)
 
        # Step4: 质检
        self.update_state(OrderState.QUALITY_CHECKING)
        future_qualified = self.executor.submit(quality.execute, product)
        qualified = future_qualified.result()
        self.update_state(OrderState.QUALIFIED)
 
        # Step5: 入库
        self.update_state(OrderState.STORING)
        future_final = self.executor.submit(storage.execute, qualified)
        final = future_final.result()
        self.update_state(OrderState.COMPLETED)
 
        return final

调用:

# encoding: utf-8
# 版权所有  2026 ©涂聚文有限公司™ ®
# 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
# 描述:Futures & Promises 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/22 21:45
# User      :  geovindu
# Product   : PyCharm
# Project   : pydesginpattern
# File      : FuturesPromisesBll.py
from concurrent.futures import ThreadPoolExecutor
from FuturesPromisesPattern.service.process_service import JewelryProcessService
 
# 任务注入(Promise)
from FuturesPromisesPattern.tasks.purchase_task import PurchaseTask
from FuturesPromisesPattern.tasks.design_task import DesignTask
from FuturesPromisesPattern.tasks.manufacture_task import ManufactureTask
from FuturesPromisesPattern.tasks.quality_task import QualityCheckTask
from FuturesPromisesPattern.tasks.storage_task import StorageTask
 
class FuturesPromisesBll(object):
    """
 
    """
    def demo(self):
        """
 
        :return:
        """
        executor = ThreadPoolExecutor(max_workers=5)
 
        # 实例化所有任务
        purchase = PurchaseTask()
        design = DesignTask()
        manufacture = ManufactureTask()
        quality = QualityCheckTask()
        storage = StorageTask()
 
        # 流程服务
        process = JewelryProcessService(executor)
 
        # 启动全流程
        final_result = process.start_full_process(
            purchase, design, manufacture, quality, storage
        )
 
        print("\n" + "=" * 60)
        print(f"✅ 订单最终交付:{final_result}")
        print("=" * 60)


输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值