Skip to article frontmatterSkip to article content

并行

本节通过打印时间戳,验证使用 StateGraph 创建的并行节点是否真的在并行。结论是真的在并行。

本节只是由我个人好奇引发的验证,意义不大,可忽略。

import time
from datetime import datetime
from langgraph.graph import StateGraph, MessagesState, START, END
from langchain_core.messages import HumanMessage
from langchain_core.runnables import RunnableConfig
# 创建虚拟并行节点1
def parallel_node1(state: MessagesState, config: RunnableConfig):
    start_time = datetime.now()
    print(f"[parallel_node1] 进入函数时间: {start_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}")

    # 使用 sleep 模拟占用时间
    time.sleep(5)

    end_time = datetime.now()
    print(f"[parallel_node1] 退出函数时间: {end_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}")

    return {'messages': [HumanMessage(
        content=f'虚拟节点1运行了{round((end_time - start_time).total_seconds(), 3)}秒'
    )]}

# 创建虚拟并行节点2
def parallel_node2(state: MessagesState, config: RunnableConfig):
    start_time = datetime.now()
    print(f"[parallel_node2] 进入函数时间: {start_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}")

    # 使用 sleep 模拟占用时间
    time.sleep(10)

    end_time = datetime.now()
    print(f"[parallel_node2] 退出函数时间: {end_time.strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]}")

    return {'messages': [HumanMessage(
        content=f'虚拟节点2运行了{round((end_time - start_time).total_seconds(), 3)}秒'
    )]}

# 创建图
builder = StateGraph(MessagesState)

# 添加节点
builder.add_node('parallel_node1', parallel_node1)
builder.add_node('parallel_node2', parallel_node2)

# 添加边
builder.add_edge(START, 'parallel_node1')
builder.add_edge(START, 'parallel_node2')
builder.add_edge('parallel_node1', END)
builder.add_edge('parallel_node2', END)

# 编译图
my_graph = builder.compile(name='my-graph')
my_graph
<langgraph.graph.state.CompiledStateGraph object at 0x10bdfe270>
# 调用图
response = my_graph.invoke({'messages': [HumanMessage(content='执行 parallel_node1 和 parallel_node2')]})

for message in response['messages']:
    message.pretty_print()
[parallel_node1] 进入函数时间: 2025-11-09 19:43:06.557
[parallel_node2] 进入函数时间: 2025-11-09 19:43:06.557
[parallel_node1] 退出函数时间: 2025-11-09 19:43:11.562
[parallel_node2] 退出函数时间: 2025-11-09 19:43:16.562
================================ Human Message =================================

执行 parallel_node1 和 parallel_node2
================================ Human Message =================================

虚拟节点1运行了5.005秒
================================ Human Message =================================

虚拟节点2运行了10.005秒