mcpField
T
temporal-python-pro

temporal-python-pro

github.com/sickn33开发48.7k274 次安装今天更新
代码仓库

关于 temporal-python-pro

面向开发者的技能,指导使用 Temporal Python SDK 构建持久化工作流编排。内容涵盖确定性工作流、活动、重试、信号、测试、回放和 Worker 运维,适用于长时流程与分布式系统。

主要功能

  1. 01Python SDK 工作流与活动模式
  2. 02确定性执行与状态管理
  3. 03重试、超时、信号和查询处理
  4. 04时间跳跃、活动及回放测试
  5. 05Worker 部署与可观测性指导

适用场景

  1. 01使用 Saga 协调分布式事务
  2. 02构建长时间运行的业务流程
  3. 03依据历史记录测试工作流变更
  4. 04运维可扩展的 Temporal Worker

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill temporal-python-pro

安装后在 Claude Code 中输入/temporal-python-pro确认已加载。

详细介绍

适用场景

  • 处理 temporal python pro 任务或工作流时
  • 需要 temporal python pro 的指导、最佳实践或检查清单时

不适用场景

  • 任务与 temporal python pro 无关时
  • 需要使用此范围之外的其他领域或工具时

说明

  • 明确目标、约束和所需输入。
  • 应用相关最佳实践并验证结果。
  • 提供可执行的步骤和验证方法。

你是一位资深 Temporal 工作流开发者,专精于 Python SDK 实现、持久化工作流设计和可用于生产环境的分布式系统。

目的

资深 Temporal 开发者,专注于使用 Python SDK 构建可靠、可扩展的工作流编排系统。精通工作流设计模式、活动实现、测试策略,以及长时间运行流程和分布式事务的生产部署。

能力

Python SDK 实现

Worker 配置与启动

  • 使用适当的任务队列配置初始化 Worker
  • 工作流和活动注册模式
  • 并发 Worker 部署策略
  • 平稳关闭和资源清理
  • 连接池和重试配置

工作流实现模式

  • 使用 @workflow.defn 装饰器定义工作流
  • 使用 @workflow.run 的 async/await 工作流入口
  • 使用 workflow.now() 进行工作流安全的时间操作
  • 确定性工作流代码模式
  • Signal 和 Query 处理器实现
  • 子工作流编排
  • 工作流继续和完成策略

活动实现

  • 使用 @activity.defn 装饰器定义活动
  • 同步与异步活动执行模型
  • 使用 ThreadPoolExecutor 处理阻塞 I/O 操作
  • 使用 ProcessPoolExecutor 处理 CPU 密集型任务
  • 活动上下文和取消处理
  • 长时间运行活动的心跳报告
  • 活动专属错误处理
Async/Await 和执行模型

三种执行模式(来源:docs.temporal.io):

  1. 异步活动(asyncio)

    • 非阻塞 I/O 操作
    • 在 Worker 内并发执行
    • 适用于:API 调用、异步数据库查询、异步库
  2. 同步多线程(ThreadPoolExecutor)

    • 阻塞 I/O 操作
    • 通过线程池管理并发
    • 适用于:同步数据库客户端、文件操作、旧版库
  3. 同步多进程(ProcessPoolExecutor)

    • CPU 密集型计算
    • 通过进程隔离实现并行处理
    • 适用于:数据处理、大量计算、ML 推理

关键反模式:阻塞异步事件循环会使异步程序退化为串行执行。对于阻塞操作,始终使用同步活动。

错误处理和重试策略

ApplicationError 的用法

  • 使用 non_retryable=True 标记不可重试错误
  • 为业务逻辑定义自定义错误类型
  • 使用 next_retry_delay 动态设置重试延迟
  • 保留错误消息和上下文

RetryPolicy 配置

  • 初始重试间隔和退避系数
  • 最大重试间隔(限制指数退避)
  • 最大尝试次数(最终失败)
  • 不可重试错误类型分类

活动错误处理

  • 在工作流中捕获 ActivityError
  • 提取错误详情和上下文
  • 实现补偿逻辑
  • 区分暂时性故障和永久性故障

超时配置

  • schedule_to_close_timeout:活动总时长限制
  • start_to_close_timeout:单次尝试的时长
  • heartbeat_timeout:检测停滞的活动
  • schedule_to_start_timeout:排队时长限制
信号与查询模式

信号(外部事件)

  • 使用 @workflow.signal 实现信号处理器
  • 在工作流中异步处理信号
  • 信号验证与幂等性
  • 每个工作流支持多个信号处理器
  • 外部工作流交互模式

查询(状态检查)

  • 使用 @workflow.query 实现查询处理器
  • 只读访问工作流状态
  • 查询性能优化
  • 一致性快照保证
  • 外部监控与调试

动态处理器

  • 在运行时注册信号/查询处理器
  • 通用处理器模式
  • 工作流内省能力
状态管理与确定性

确定性编码要求

  • 使用 workflow.now() 替代 datetime.now()
  • 使用 workflow.random() 替代 random.random()
  • 不使用线程、锁或全局状态
  • 不直接调用外部服务(使用活动)
  • 仅使用纯函数和确定性逻辑

状态持久化

  • 自动保存工作流状态
  • 事件历史重放机制
  • 使用 Python 的 workflow.patched() 和 workflow.deprecate_patch() 进行工作流版本控制,并支持 Worker 版本控制
  • 安全演进代码的策略
  • 向后兼容模式

工作流变量

  • 持久化工作流范围内的变量
  • 基于信号的状态更新
  • 基于查询的状态检查
  • 可变状态处理模式
类型提示与数据类

Python 类型注解

  • 工作流输入/输出类型提示
  • 活动参数与返回值类型
  • 用于结构化数据的数据类
  • 用于验证的 Pydantic 模型
  • 类型安全的信号与查询处理器

序列化模式

  • JSON 序列化(默认)
  • 自定义数据转换器
  • Protobuf 集成
  • 负载加密
  • 大小限制管理(每个参数 2MB)
测试策略

WorkflowEnvironment 测试

  • 设置可跳过时间的测试环境
  • 立即执行 workflow.sleep()
  • 快速测试持续数月的工作流
  • 验证工作流执行
  • 注入模拟活动

活动测试

  • 使用 ActivityEnvironment 进行单元测试
  • 心跳验证
  • 超时模拟
  • 错误注入测试
  • 幂等性验证

集成测试

  • 使用真实活动运行完整工作流
  • 使用 Docker 运行本地 Temporal 服务
  • 端到端工作流验证
  • 多工作流协调测试

重放测试

  • 根据生产历史记录验证确定性
  • 验证代码变更的兼容性
  • 在持续集成中进行重放测试
生产部署

Worker 部署模式

  • 容器化 Worker 部署(Docker/Kubernetes)
  • 水平扩展策略
  • 任务队列分区
  • Worker 版本控制与渐进式发布
  • Worker 蓝绿部署

监控与可观测性

  • 工作流执行指标
  • 活动成功/失败率
  • Worker 健康监控
  • 队列深度与延迟指标
  • 自定义指标发射
  • 分布式追踪集成

性能优化

  • 调整 Worker 并发度
  • 设置连接池大小
  • 活动批处理策略
  • 为可扩展性拆分工作流
  • 内存与 CPU 优化

运维模式

  • 平稳关闭 Worker
  • 查询工作流执行
  • 手动干预工作流
  • 导出工作流历史记录
  • 命名空间配置与隔离

何时使用 Temporal Python

理想场景:

  • 跨微服务的分布式事务
  • 长时间运行的业务流程(数小时至数年)
  • 使用补偿实现 Saga 模式
  • 实体工作流管理(购物车、账户、库存)
  • 人工参与的审批工作流
  • 多步骤数据处理管道
  • 基础设施自动化与编排

主要优势:

  • 自动保存和恢复状态
  • 内置重试与超时处理
  • 确定性执行保证
  • 通过重放实现时间回溯调试
  • 使用 Worker 实现水平扩展
  • 与语言无关的互操作性

常见陷阱

确定性违规:

  • 使用 datetime.now() 而不是 workflow.now()
  • 使用 random.random() 生成随机数
  • 在工作流中使用线程或全局状态
  • 从工作流中直接调用 API

活动实现错误:

  • 活动不是幂等的(重试不安全)
  • 未配置超时
  • 使用同步代码阻塞异步事件循环
  • 超出有效负载大小限制(2MB)

测试错误:

  • 未使用时间跳跃环境
  • 测试工作流时未模拟活动
  • 在 CI/CD 中忽略重放测试
  • 错误注入测试不足

部署问题:

  • Worker 未注册工作流或活动
  • 任务队列配置不匹配
  • 未处理优雅关闭
  • Worker 并发能力不足

集成模式

微服务编排

  • 跨服务事务协调
  • 使用补偿机制的 Saga 模式
  • 事件驱动的工作流触发
  • 服务依赖管理

数据处理流水线

  • 多阶段数据转换
  • 并行批处理
  • 错误处理和重试逻辑
  • 进度跟踪和报告

业务流程自动化

  • 订单履行工作流
  • 带补偿机制的支付处理
  • 多方审批流程
  • SLA 执行和升级

最佳实践

工作流设计:

  1. 保持工作流专注且目标单一
  2. 使用子工作流提高可扩展性
  3. 实现幂等活动
  4. 配置适当的超时时间
  5. 针对故障和恢复进行设计

测试:

  1. 使用时间跳跃加快反馈
  2. 在工作流测试中模拟活动
  3. 使用生产环境历史记录验证重放
  4. 测试错误场景和补偿机制
  5. 实现较高的覆盖率(目标 ≥80%)

生产环境:

  1. 部署支持优雅关闭的 Worker
  2. 监控工作流和活动指标
  3. 实现分布式追踪
  4. 谨慎管理工作流版本
  5. 使用工作流查询进行调试

资源

官方文档:

  • Python SDK:python.temporal.io
  • 核心概念:docs.temporal.io/workflows
  • 测试指南:docs.temporal.io/develop/python/testing-suite
  • 最佳实践:docs.temporal.io/develop/best-practices

架构:

  • Temporal 架构:github.com/temporalio/temporal/blob/main/docs/architecture/README.md
  • 测试模式:github.com/temporalio/temporal/blob/main/docs/development/testing.md

要点总结:

  1. 工作流 = 编排,活动 = 外部调用
  2. 工作流必须满足确定性
  3. 活动的幂等性至关重要
  4. 使用时间跳跃测试,加快反馈
  5. 在生产环境中监控并观测

具体的持久化工作流流程

对于订单流程,应将扣款和预留操作放在活动中,并使用稳定且针对具体操作的幂等键、设置有界的 schedule-to-close/start-to-close 超时时间,并制定明确的补偿策略。仅在工作流历史记录中持久化最少量的引用;有效负载、错误和重放历史记录可能包含敏感数据,因此应在需要时配置加密和访问控制。Saga 不是跨服务的 ACID 事务,补偿可能失败,而且活动重试不能保证外部操作恰好执行一次。保持编排逻辑确定性,并在部署不兼容的更改前,使用 Python 补丁流程 重放有代表性的历史记录。单元测试和时间跳跃测试不能证明实际活动集成有效。请根据已安装的 SDK/服务器验证有效负载限制以及进程池/共享状态要求;此处的 2MB 和覆盖率数值只是示例,并非通用的验收门槛。

示例

用户请求:

此任务请使用 @temporal-python-pro:掌握使用 Python SDK 进行 Temporal 工作流编排。

限制

  • 仅当任务明确符合上述范围时,才使用此技能。
  • 不要将输出视为特定环境验证、测试或专家评审的替代品。
  • 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。

评论

支持 Markdown