超时与等待策略
TriggerFlow 是事件驱动的编排系统,结果可能依赖外部信号。如果没有超时控制,start() 或 get_result() 可能长期阻塞。
为什么需要 timeout
- 事件驱动:流程往往等待外部
emit()才能继续 - 异步启动:
execution.async_start()非阻塞启动后,结果可能在任意时刻才出现 - 工程稳定性:超时可避免接口一直挂起,便于降级与监控
对于线性流或能确保所有块都会执行完毕的流程,不需要超时控制,可以把 timeout 设为 0(立即返回)或 None(一直等待)。
timeout 的工作逻辑
start() / get_result() 的底层逻辑是等待 result_ready 事件:
timeout=None:一直等待直到end()或set_result()timeout=0:不等待,立即返回当前结果(通常为None)timeout>0:超过时间未完成会返回None并提示超时警告
示例:异步触发 + 超时等待
python
from agently import TriggerFlow, TriggerFlowEventData
flow = TriggerFlow()
@flow.chunk
def approve(data: TriggerFlowEventData):
return f"approved:{data.value}"
flow.when("User.Confirm").to(approve).end()
execution = flow.start_execution("start", wait_for_result=False)
print("before", execution.get_result(timeout=0.01))
execution.emit("User.Confirm", "ok")
print("after", execution.get_result(timeout=1))运行结果(会伴随一次超时警告):
text
before None
after approved:ok何时不需要 timeout
- 线性链路明确
end(),且一定会完成 - 你希望完全阻塞直到结果出现(
timeout=None)