欢迎光临
我们一直在努力

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)

输出:

赞(0)
未经允许不得转载:171主机测评 » python: Futures & Promises Pattern
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址