项目结构:

# 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)
输出:


460

被折叠的 条评论
为什么被折叠?



