首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >LangGraph >LangGraph 如何处理并发和并行执行?

LangGraph 如何处理并发和并行执行?

词条归属:LangGraph

1. Send API 动态并发

Send 对象是 LangGraph 实现并行的核心 API。当一个节点返回 [Send("node_a", state_a), Send("node_b", state_b)] 这样的 Send 列表时,LangGraph 会在同一个超级步中为每个 Send 创建独立的执行分支,所有分支并发执行。执行完毕后,各分支的结果通过 reducer 自动合并回主状态。这种模式非常适合 fan-out/fan-in 场景,如同时查询多个数据源或并行处理多个文档。

2. 静态扇出模式

对于并发数量在编译期就固定的场景,可以使用多条 add_edge() 声明静态扇出。例如一个评估节点同时连接到三个并行评估 Worker,所有 Worker 完成后汇聚到一个聚合节点。这种方式实现简单但并发数量固定,不如 Send API 灵活。

3. 并发执行的关键注意事项

并发执行时有几个常见陷阱需要注意:首先,并发节点同时写入同一状态字段时会触发 InvalidUpdateError,必须为对应的状态键声明合适的 reducer(如 operator.add);其次,Send 调度的是并行执行但并非真正的异步并发——如果节点函数中包含阻塞 I/O(如同步 HTTP 请求),仍然会串行执行,需要使用 async/await 实现真正的并发;最后,并发数过高可能触发 LLM API 的限流,建议通过 asyncio.Semaphore 限制最大并发数。

4. 错误传播与容错

默认情况下,如果任何一个 Send 目标抛出异常,整个步骤都会失败。生产环境中应在路由节点中使用 try-except 包装,或将错误路由到专门的容错节点,将失败分支的结果聚合到状态中而不是让整个流程崩溃。对于关键任务,还可以在每个 Worker 节点内部实现重试逻辑。

相关文章
python 并发、并行处理、分布式处理
还可以通过 add_done_callback 指定回调函数,当结果可用时,调用它(第一参数为 future obj)
Michael阿明
2022-09-22
2.5K0
并发和并行、线程和进程
《并发的艺术》中大概是这样写的,系统中有多个任务同时存在可称之为“并发”,系统内有多个任务同时执行可称之为“并行”;并发是并行的子集。比如在单核CPU系统上,只可能存在并发而不可能存在并行。
訾博ZiBo
2025-01-06
5710
架构之:并发和并行
在现代程序中,我们经常会使用到两个关键词:并发concurrency和并行parallelism,虽然两者的英文单词区别很大,但是翻译成中文之后几乎是一样的。虽然中文以其优美的语法和工整的写法凌驾于英语之上,但是带来的复杂性和翻译的多意性往往会给技术工作者一点点烦恼。
程序那些事
2021-06-09
4630
[Go] 并发和并行的区别
并发和并行的区别: 1.并行是让不同的代码片段同时在不同的物理机器上运行,并行的关键是在不同的物理机器上同时运行
唯一Chat
2019-09-10
5050
架构之:并发和并行
在现代程序中,我们经常会使用到两个关键词:并发concurrency和并行parallelism,虽然两者的英文单词区别很大,但是翻译成中文之后几乎是一样的。虽然中文以其优美的语法和工整的写法凌驾于英语之上,但是带来的复杂性和翻译的多意性往往会给技术工作者一点点烦恼。
程序那些事
2021-05-30
8090
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券