Skip to main content

funboost-workflow

当需要编排多个 funboost 任务按顺序或并行执行时使用。触发场景:chain 串行流水线、group 并行执行、chord 扇出聚合、嵌套 chain/group/chord 组合、任务依赖编排。关键词:workflow, chain, group, chord, pipeline, 嵌套组合, 工作流, 任务依赖, fan-out, fan-in, WorkflowBoosterParams。

来源信息

仓库
ydf0509/funboost
最近来源活动
2026年8月4日 14:03
检测到的 SKILL.md 语言
中文
星标
892
分支
165

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
funboost-workflow
description
当需要编排多个 funboost 任务按顺序或并行执行时使用。触发场景:chain 串行流水线、group 并行执行、chord 扇出聚合、嵌套 chain/group/chord 组合、任务依赖编排。关键词:workflow, chain, group, chord, pipeline, 嵌套组合, 工作流, 任务依赖, fan-out, fan-in, WorkflowBoosterParams。
# Funboost 工作流编排 ## 概述 Funboost workflow 模块提供类似 Celery 的原语(`chain`、`group`、`chord`),用于编排多步骤任务流水线,但比 Celery 更简单。 **核心原则:** 用 `chain`(串行)、`group`(并行)、`chord`(扇出后聚合)组合任务编排流水线。 ## 适用场景 - 多步骤处理流水线(下载 -> 处理 -> 上传) - 扇出/扇入模式(并行处理,然后汇总) - 任务依赖——步骤 B 需要步骤 A 的结果 - 复杂多步骤工作流 ## 速查表 | 原语 | 模式 | 说明 | |------|------|------| | `chain(a, b, c)` | A -> B -> C | 串行执行 | | `group(a, b, c)` | A // B // C | 并行执行 | | `chord(group(...), callback.s())` | (A // B // C) -> D | 并行后聚合 | | `func.s(*args)` | — | 创建签名(懒任务引用) | | `func.si(*args)` | — | 创建不可变签名(忽略上游结果) | ## 核心代码模式 ```python from funboost import boost, BoosterParams, BrokerEnum from funboost.workflow import chain, group, chord, WorkflowBoosterParams @boost(WorkflowBoosterParams( queue_name="download_queue", broker_kind=BrokerEnum.REDIS_ACK_ABLE, is_using_rpc_mode=True, )) def download(url: str): print(f"下载 {url}") return f"/tmp/{url.split('/')[-1]}" @boost(WorkflowBoosterParams( queue_name="process_queue", broker_kind=BrokerEnum.REDIS_ACK_ABLE, is_using_rpc_mode=True, )) def process(file_path: str, resolution: str = "720p"): print(f"处理 {file_path},分辨率 {resolution}") return f"{file_path}.{resolution}.mp4" @boost(WorkflowBoosterParams( queue_name="notify_queue", broker_kind=BrokerEnum.REDIS_ACK_ABLE, is_using_rpc_mode=True, )) def notify(results: list, user_id: int): print(f"通知用户 {user_id}:{len(results)} 个文件已就绪") return "done" ``` ## Chain — 串行流水线 ```python download.consume() process.consume() workflow = chain( download.s("https://example.com/video.mp4"), process.s(resolution="1080p"), ) result = workflow.apply() ``` > **注意:** 使用 workflow 前,所有参与的任务函数必须先调用 `consume()` 启动消费。`apply()` 返回最后一步的 `FunctionResultStatus` 对象(非直接值),通过 `.result` 属性取实际返回值。`group.apply()` 返回结果列表。 每个任务的返回值作为下一个任务的第一个参数传入(使用 `.si()` 可忽略上游结果)。 ## Group — 并行执行 ```python process.consume() parallel_tasks = group( process.s("/tmp/video.mp4", resolution="360p"), process.s("/tmp/video.mp4", resolution="720p"), process.s("/tmp/video.mp4", resolution="1080p"), ) result = parallel_tasks.apply() ``` > **注意:** 参与 group 的任务函数需先 `consume()` 启动消费(同一函数只需调用一次)。 所有任务并发运行。 ## Chord — 扇出后聚合 ```python process.consume() notify.consume() workflow = chord( group( process.s("/tmp/v.mp4", resolution=r) for r in ["360p", "720p", "1080p"] ), notify.s(user_id=1001), ) result = workflow.apply() ``` > **注意:** chord 涉及的所有任务函数(group 成员 + 回调)都需先 `consume()` 启动消费。 group 中所有任务并行执行;全部完成后,结果收集为列表传给回调函数。 ## 复杂嵌套流水线 ```python download.consume() process.consume() notify.consume() workflow = chain( download.s("https://example.com/video.mp4"), chord( group( process.s(resolution=r) for r in ["360p", "720p", "1080p"] ), notify.s(user_id=1001), ), ) result = workflow.apply() ``` > **注意:** 嵌套 chain/group/chord 组合时,每个参与的任务函数都需 `consume()` 启动消费。 ## 重要注意事项 1. **`WorkflowBoosterParams`** — 工作流任务推荐用这个(已默认 `is_using_rpc_mode=True` 并注入必要 Mixin) 2. **导入 `funboost.workflow`** — `.s()` / `.si()` 方法仅在导入 workflow 模块后才可用(如 `from funboost.workflow import chain, ...`) 3. **`.s()` 方法** — 创建签名(懒引用),用于工作流组合;`.si()` 为不可变签名,忽略上游结果 4. **统一 broker** — 工作流中的所有任务建议使用相同的 broker 5. **需配置 Redis** — 工作流依赖 RPC(即使用非 Redis broker 也需要 Redis 存储 RPC 结果) 6. **启动消费者** — 每个任务函数都需 `func.consume()` 才能执行 ## 常见错误 | 错误 | 修正 | |------|------| | 工作流任务用 `BoosterParams` | 推荐用 `WorkflowBoosterParams`(已内置 RPC 和 Mixin) | | 忘记 import funboost.workflow | `.s()` 方法需要导入 workflow 模块后才可用 | | 直接调用 `func(args)` 而非 `func.s(args)` | `.s()` 创建签名,不要直接调用函数 | | 工作流中混用不同 broker | 所有工作流任务保持相同 broker | | 没有启动消费者 | 每个任务函数都需要 `func.consume()` 运行 | ## 相关 Skill - `using-funboost-basics` — 基础使用入门 - `funboost-rpc-mode` — 获取任务执行返回值
在 GitHub 查看