Parallel
在容器内并发运行子块
Parallel 块是 TradingGoose 中的容器块,可并发运行子块。
Parallel 块是容器节点。在画布上将子块拖入 Parallel 内部。入边从 Parallel Start 进入,子块输出在 Parallel End 重新连接,之后工作流才继续到容器外部。
概述
Parallel 块让你可以:
分配工作:并发处理多个项目
加速执行:同时运行独立操作
处理批量操作:高效处理大型数据集
汇总结果:收集所有并行执行的输出
配置选项
并行类型
在两种并行执行类型之间选择:
基于数量的并行 - 执行固定数量的并行实例。
当你需要多次并发运行同一操作时使用。
Example: Run 5 parallel instances
- Instance 1 ┐
- Instance 2 ├─ All execute simultaneously
- Instance 3 │
- Instance 4 │
- Instance 5 ┘基于集合的并行 - 将集合分配到各个并行实例。
每个实例同时处理集合中的一个项目。
Example: Process ["task1", "task2", "task3"] in parallel
- Instance 1: Process "task1" ┐
- Instance 2: Process "task2" ├─ All execute simultaneously
- Instance 3: Process "task3" ┘如何使用 Parallel 块
创建 Parallel 块
- 从工具栏将 Parallel 块拖到画布上
- 配置并行类型和参数
- 将需要并行运行的子块拖入容器内
- 将传入流连接到 Parallel Start,并将子块输出连接回 Parallel End,之后再继续到容器外部
访问结果
并行块完成后,在引用下拉菜单中选择它的 results 输出,并将 parallel-id 替换为该容器的实际 ID:
<parallel-id.results>:按实例索引排序的所有并行实例结果数组
示例用例
批量 API 处理
场景:同时处理多个 API 调用
- 并行块,集合为多个 API 端点
- 并行块内部:API 块调用每个端点
- 并行块之后:统一处理所有响应
多模型 AI 处理
场景:获取多个 AI 模型的响应
- 基于集合对模型 ID 列表进行并行(例如 ["gpt-4o", "claude-3.7-sonnet", "gemini-2.5-pro"])
- 并行块内部:Agent 的模型设置为集合中的当前项
- 并行块之后:比较并选择最佳响应
高级功能
结果聚合
所有并行实例的结果会自动收集:
// In a Function block after the parallel
const allResults = <parallel-id.results>;
return allResults;实例隔离
块输出和当前项按实例记录,但工作流变量由所有实例共享。并发写入同一变量会产生竞争;请返回逐项输出,并在 Parallel 块之后聚合。
未处理的块错误可能导致执行失败;并行不保证错误隔离。如需恢复,请在容器内连接错误路径。
限制
容器块(循环和并行)不能相互嵌套。这意味着:
- 你不能在并行块内放置循环块
- 你不能在并行块内放置另一个并行块
- 你不能在容器块内放置任何容器块
并行执行虽然更快,但需注意:
- 并发请求时的 API 速率限制
- 大数据集的内存占用
- 计数模式最多创建 20 个实例;集合模式为每个元素创建实例,不受此限制。请显式分批处理大型集合。
并行与循环
了解何时使用每种方式:
| 特性 | 并行 | 循环 |
|---|---|---|
| 执行 | 并发 | 顺序 |
| 速度 | 独立操作更快 | 较慢但有序 |
| 顺序 | 完成顺序不定;结果按实例索引排列 | 保持顺序 |
| 适用场景 | 独立操作 | 依赖操作 |
| 资源占用 | 更高 | 更低 |
输入与输出
并行类型:在 “count”(计数)或 “collection”(集合)之间选择
Count:要运行的实例数量(基于计数)
Collection:要分发的数组或对象(基于集合)
parallel.currentItem:当前实例的项
parallel.index:实例编号(从 0 开始)
parallel.items:完整集合(基于集合)
results:所有实例结果的数组
访问:在并行块之后的块中可用
最佳实践
- 仅限独立操作:确保各操作之间互不依赖
- 处理速率限制:为 API 密集的工作流添加延迟或限流
- 错误处理:每个实例都应妥善处理自身的错误