Skip to content

超时与等待策略

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