循环与重入安全
可视化边界:图里会示意循环关系;若导出 JSON/YAML,请继续使用具名 handler / condition。
TriggerFlow 可以做循环,但推荐做“可证明会停下来的循环”。
1. 三种安全循环模式
如何阅读这张图
- 真正安全的不是“能循环”,而是“每种循环的停机条件和控制权都清楚”。
- 三种模式分别对应纯内部控制、外部批准控制、外部事件驱动控制。
2. 有界自循环
最简单的安全方式是给每轮明确终止条件:
python
async def loop_step(data):
count = int(data.state.get("count", 0) or 0)
if count >= 3:
data.set_result({"done": True, "count": count})
return
data.state.set("count", count + 1, emit=False)
await data.async_emit("Loop", count + 1)3. pause/resume 回合式循环
更稳的方式是每轮暂停,等外部决定是否继续:
step -> pause_for()- 外部
continue_with() ResumeLoop -> emit("Loop")
这种方式适合:
- 人机协作
- 审批流
- 长事务
4. 外部事件重入
很多时候最安全的“循环”不是自发信号,而是 execution 等外部持续重入:
python
execution.emit("Tick", 1)
execution.emit("Tick", 1)
execution.emit("Tick", 1)这适合:
- webhook
- MQ
- 定时触发
5. 关键原则
- 每一轮都要有明确退出条件
- 若循环承担最终输出,记得
set_result()或.end() - 不要把无限自旋当默认控制流