
























在构建复杂 AI 工作流、多任务处理流程时,并行执行是提升效率、缩短整体耗时的核心能力。传统的流程编排工具往往需要复杂的配置、额外的并发控制代码,而 LangGraph 凭借极简的设计,让并行任务的实现变得开箱即用。
今天就和大家分享,如何用 LangGraph 零门槛实现多任务并行执行,无需繁琐的并发编程,轻松解锁工作流的高效处理能力。
相比其他工作流框架,LangGraph 的并行能力具备三大核心亮点:
本次实践中,我们构建了双任务并行的工作流:两个独立任务同时启动,耗时任务不阻塞其他任务执行,最终自动聚合所有结果,完美体现了 LangGraph 并行处理的核心价值。
实现 LangGraph 并行工作流,核心遵循状态定义→节点构建→并行入口配置→结果聚合四步逻辑,全程无需关注底层并发细节:
首先通过结构化类型定义工作流的全局状态,包含输入数据、各任务的执行结果,以及专门用于聚合的结果集合。关键特性:状态支持自动合并注解,并行任务产生的数据会按照规则自动整合,避免数据冲突。
将需要并行执行的业务逻辑,封装为独立的处理节点,每个节点只关注自身的业务功能。节点之间完全解耦,互不干扰,这是并行执行的基础 —— 框架会自动识别独立节点,为其分配并行执行的资源。
这是实现并行的核心步骤:为工作流设置多个入口节点。LangGraph 会识别多个入口配置,同时启动所有入口节点,让多个任务真正意义上同步运行,而非串行等待。比如本次实践中,两个任务节点同时启动,快速任务无需等待耗时任务完成,极大缩短了总执行时间。
并行任务执行完成后,所有分支会自动汇聚到统一的聚合节点。框架会自动同步所有并行任务的状态数据,在聚合节点中轻松获取所有任务的执行结果,完成最终的数据整合,流程闭环结束。
在本次并行工作流中,我们设置了一个耗时 3 秒的任务和一个即时任务,运行效果完美验证了并行能力:
同时,LangGraph 提供了工作流可视化能力,我们可以清晰看到:起始节点同时分叉出两个并行任务,任务执行完成后汇聚到聚合节点,最终结束流程,结构清晰易懂。
LangGraph 让并行工作流的开发告别了复杂的并发编程,通过状态管理 + 多入口配置 + 自动聚合的极简模式,就能轻松实现多任务并行执行。
无论是 AI 多模型并行调用、数据多渠道同步处理,还是业务多分支同时执行,LangGraph 都能以最低的开发成本,实现最高效的流程处理,是构建现代工作流、AI 应用的绝佳工具。
代码实现:
from langgraph.graph import StateGraph, END
from typing import TypedDict, Annotated
import operator
import time
# 定义状态(必须继承TypedDict)
class ParallelState(TypedDict):
input_data: str
task_a_result: str
task_b_result: str
all_results: Annotated[list, operator.add] # 使用注解实现自动合并
# 创建图构建器
graph_builder = StateGraph(state_schema=ParallelState)
# 定义并行执行函数
def process_task_a(state: ParallelState):
print("\nA开始执行...")
time.sleep(3) # 休眠3秒
print("3秒后继续执行")
print(f"Task A processing: {state['input_data']}")
return {"task_a_result": f"A处理结果: {state['input_data']}"}
def process_task_b(state: ParallelState):
print("\nB开始执行...")
print(f"Task B processing: {state['input_data']}")
return {"task_b_result": f"B处理结果: {state['input_data']}"}
def aggregate_results(state: ParallelState):
all_results = [state['task_a_result'], state['task_b_result']]
print(f"聚合结果: {all_results}")
return {"all_results": all_results}
# 添加节点
graph_builder.add_node("task_a", process_task_a)
graph_builder.add_node("task_b", process_task_b)
graph_builder.add_node("aggregator", aggregate_results)
# 设置入口点 - 多个入口点实现并行
graph_builder.set_entry_point("task_a")
graph_builder.set_entry_point("task_b")
# 添加边连接
graph_builder.add_edge("task_a", "aggregator")
graph_builder.add_edge("task_b", "aggregator")
graph_builder.add_edge("aggregator", END)
# 编译图
graph = graph_builder.compile()
#画图
print(graph.get_graph().draw_ascii())
# 执行
initial_state = {"input_data": "测试数据"}
result = graph.invoke(initial_state)
print("最终结果:", result)
输出数据:
+-----------+
| __start__ |
+-----------+
* *
** **
* *
+--------+ +--------+
| task_a | | task_b |
+--------+ +--------+
* *
** **
* *
+------------+
| aggregator |
+------------+
*
*
*
+---------+
| __end__ |
+---------+
A开始执行...
B开始执行...
Task B processing: 测试数据
3秒后继续执行
Task A processing: 测试数据
聚合结果: ['A处理结果: 测试数据', 'B处理结果: 测试数据']
最终结果: {'input_data': '测试数据', 'task_a_result': 'A处理结果: 测试数据', 'task_b_result': 'B处理结果: 测试数据', 'all_results': ['A处理结果: 测试数据', 'B处理结果: 测试数据']}
更多学习资料尽在 老虎网盘资源
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。