执行生命周期、暂停恢复与保存恢复
可视化边界:状态机图强调运行语义;导出配置时仍需具名 handler / condition。
1. Execution 状态机
如何阅读这张图
cancelled当前是显式状态常量,但没有对外cancel()API,这表示状态语义已经存在,公开控制接口还没有开放。waiting是“等待外部继续”,不是线程阻塞。
2. start() 与 start_execution()
flow.start(...)适合直接等待结果的场景flow.start_execution(..., wait_for_result=False)适合长生命周期 execution
3. 暂停、保存、恢复链路
架构思路
save()/load()恢复的是流程语义状态,不是 Python 协程栈。- 所以真正可靠的恢复方式永远是“等待外部事件再继续”,而不是期待某个正在执行的协程原地复活。
4. 中断与恢复
python
interrupt = await data.async_pause_for(
type="human_input",
payload={"question": "approve?"},
resume_event="UserFeedback",
)后续可通过:
get_interrupt(interrupt_id)get_pending_interrupts()continue_with(interrupt_id, value)
恢复执行。
5. save() 会保存什么
save() 当前会保存:
execution_idstatusruntime_dataflow_datainterruptslast_signalresource_keysresult
不会保存:
- 运行依赖对象本身
- Python 协程栈
6. get_last_signal()
last_signal 会记录最近一次被 dispatch 的信号,可用于:
- 调试
- 审计
- save/load 后判断恢复点
7. 当前最佳实践
- 长任务优先
start_execution(..., wait_for_result=False) - 等外部输入时优先
pause_for(),不要 busy loop - 让
state存恢复状态,让resources存运行依赖