Prhub

#20276 [HiCache] fix: graceful shutdown of pending async tasks in bench_mix.py

原始 PR 作者 alphabetc1 合并时间 2026-03-29 15:46 文件变更 1 提交数 2 评论 1 代码增减 +8 / -1

执行摘要

修复 bench_mix.py 中异步任务优雅关闭,避免 benchmark 输出误导性错误。

根据PR body,benchmark成功但输出'Event loop is closed'和'Task was destroyed but it is pending'等错误消息,这些是纯粹的关闭问题。根因是request_sender关闭event loop时,handle_request任务仍在等待HTTP响应,导致孤儿任务被强制销毁产生虚假错误输出。

对于负责benchmark脚本或异步编程的工程师,建议阅读此PR以学习优雅关闭异步任务的最佳实践。代码改动简单,但展示了重要的asyncio模式,值得关注其错误处理设计。

讨论亮点

review中仅有一次评论,来自gemini-code-assist[bot],指出实现正确并遵循asyncio任务管理最佳实践。没有争议或未解决疑虑,变更被hnyls2002批准合并。

实现拆解

仅修改了benchmark/hicache/bench_mix.py文件中的request_loop函数。关键改动:引入tasks列表跟踪所有asyncio.create_task创建的任务;在循环退出条件满足时,遍历tasks列表调用task.cancel(),然后使用await asyncio.gather(*tasks, return_exceptions=True)等待所有任务完成,确保在关闭event loop前优雅处理待定任务。

文件 模块 状态 重要度
benchmark/hicache/bench_mix.py benchmark/hicache modified 5.0

关键符号

request_loop

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

优雅关闭异步任务的正确性 正确性

gemini-code-assist[bot] commented that the implementation is sound and follows best practices for asyncio task management.

结论:变更被批准合并,解决了关闭问题。 · 已解决

风险与影响

风险较低。改动涉及异步任务取消逻辑,如果任务处理异常不当,可能导致未处理的异常或潜在死锁,但使用了return_exceptions=True可以捕获异常,减少风险。此外,只影响benchmark脚本的关闭过程,不涉及核心业务逻辑,回归风险小。

对用户影响:benchmark输出更清晰,不再有误导性错误,提升用户体验和调试便利性。对系统影响:无性能或功能影响,仅改善关闭行为。对团队影响:代码维护性提高,为类似异步任务管理提供范例,有助于其他开发人员学习最佳实践。

低风险变更 异步任务管理

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论