python
...
...
import time
class PubState(TypedDict):
publicStr: Annotated[str, operator.add]
def fna(state: PubState):
v2 = state["publicStr"] +"2222"
print('a',state["publicStr"])
return {
"publicStr": v2
}
def fnb(state: PubState):
time.sleep(1)
v1 = state["publicStr"] +"1111"
print('b',state["publicStr"])
return {
"publicStr": v1
}
builder=StateGraph(PubState)
builder.add_node("fn1",fna)
builder.add_node("fn2",fnb)
builder.add_edge(START, "fn1")
builder.add_edge(START, "fn2")
graph=builder.compile()
res=graph.invoke({"publicStr":"start"})
rprint(res)
打印结果
arduino
{'publicStr': 'startstart2222start1111'}
我试了调整fna 和 fnb 的顺序,注册先后顺序,给fnb 加延迟时间time.sleep(1),执行结果都没有变化, 后来我改变函数名字,例如,1_fnb 2_fna ,fn2 fn1 ,才返现了规律,执行顺序是根据名字的编码顺序先后执行的,编码数值小的先执行,跟注册顺序,执行先后没有关系 而且每个函数执行前就拿到了state的快照,同级函数修改结果对自己没有影响,同级函数都执行结束才统一修改state的值