fix(sub_agent): 修复 wait_for_completion 因 _load_state 替换 tasks 字典导致的引用失效
This commit is contained in:
parent
6618ab03dc
commit
af56de6812
@ -264,11 +264,16 @@ class SubAgentManager(SubAgentStateMixin, SubAgentStatsMixin, SubAgentCreationMi
|
||||
return {"success": False, "status": task.get("status"), "message": "子智能体已结束。"}
|
||||
|
||||
real_task_id = task["task_id"]
|
||||
running_task = self._running_tasks.get(real_task_id)
|
||||
deadline = time.time() + (timeout_seconds or task.get("timeout_seconds") or SUB_AGENT_DEFAULT_TIMEOUT)
|
||||
|
||||
while time.time() < deadline:
|
||||
self.reconcile_task_states()
|
||||
# 关键:其他线程(如前端轮询 /api/sub_agents)可能调用 _load_state()
|
||||
# 并替换 self.tasks 字典,导致旧 task 引用失效。每次循环重新获取引用。
|
||||
task = self.tasks.get(real_task_id)
|
||||
if not task:
|
||||
return {"success": False, "error": "未找到对应的子智能体任务"}
|
||||
running_task = self._running_tasks.get(real_task_id)
|
||||
status = task.get("status")
|
||||
|
||||
# 已到达终态:返回最终结果(持续 reconcile 直到 final_result 就绪)
|
||||
@ -278,6 +283,7 @@ class SubAgentManager(SubAgentStateMixin, SubAgentStatsMixin, SubAgentCreationMi
|
||||
# 终态但 final_result 尚未写入,短暂等待后重试
|
||||
time.sleep(SUB_AGENT_STATUS_POLL_INTERVAL)
|
||||
self.reconcile_task_states()
|
||||
task = self.tasks.get(real_task_id) or task
|
||||
if task.get("final_result"):
|
||||
return task["final_result"]
|
||||
return {"success": False, "status": status, "message": "子智能体已结束,但未获取到结果。"}
|
||||
@ -285,6 +291,7 @@ class SubAgentManager(SubAgentStateMixin, SubAgentStatsMixin, SubAgentCreationMi
|
||||
# asyncio Task 已结束但状态可能还没同步:等待 final_result 就绪
|
||||
if running_task and running_task.done():
|
||||
self.reconcile_task_states()
|
||||
task = self.tasks.get(real_task_id) or task
|
||||
if task.get("final_result"):
|
||||
return task["final_result"]
|
||||
# 结果尚未落盘,继续轮询,避免把「已创建」误判为失败
|
||||
|
||||
Loading…
Reference in New Issue
Block a user