首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >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 节点内部实现重试逻辑。

相关文章
并发与并行的区别_并发执行和并行执行
学习多线程的时候会遇到一个名词:并发。这是属于操作系统中的词汇,需要了解并发和并行的区别,从网上搜集了几种说法帮助理解。 一: 并发是指一个处理器同时处理多个任务。 并行是指多个处理器或者是多核的处理器同时处理多个不同的任务。 并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生。 来个比喻:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。 二: 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。就好像两个人各拿一把铁锨在挖坑,一小时后,每人一个大坑。所以无论从微观还是从宏观来看,二者都是一起执行的。
全栈程序员站长
2022-11-04
2K0
python 并发、并行处理、分布式处理
还可以通过 add_done_callback 指定回调函数,当结果可用时,调用它(第一参数为 future obj)
Michael阿明
2022-09-22
2.5K0
并发和并行、线程和进程
《并发的艺术》中大概是这样写的,系统中有多个任务同时存在可称之为“并发”,系统内有多个任务同时执行可称之为“并行”;并发是并行的子集。比如在单核CPU系统上,只可能存在并发而不可能存在并行。
訾博ZiBo
2025-01-06
5560
架构之:并发和并行
在现代程序中,我们经常会使用到两个关键词:并发concurrency和并行parallelism,虽然两者的英文单词区别很大,但是翻译成中文之后几乎是一样的。虽然中文以其优美的语法和工整的写法凌驾于英语之上,但是带来的复杂性和翻译的多意性往往会给技术工作者一点点烦恼。
程序那些事
2021-06-09
4620
[Go] 并发和并行的区别
并发和并行的区别: 1.并行是让不同的代码片段同时在不同的物理机器上运行,并行的关键是在不同的物理机器上同时运行
唯一Chat
2019-09-10
4940
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券