Prhub

#21824 fix: pre-init tokenizer_manager to avoid AttributeError in shutdown

原始 PR 作者 alphabetc1 合并时间 2026-04-02 01:54 文件变更 1 提交数 1 评论 0 代码增减 +4 / -0

执行摘要

预初始化 tokenizer_manager 避免引擎初始化失败时 shutdown 触发 AttributeError。

根据PR body中引用的CI失败链接和描述,当_launch_subprocesses失败时,atexit.register(self.shutdown)已注册但self.tokenizer_manager尚未赋值。此时shutdown()被触发并访问self.tokenizer_manager会引发AttributeError。预初始化为None后,shutdown中已有的if self.tokenizer_manager is not None检查能正确处理此情况。

这是一个简单的防御性修复,无需深入阅读。但可关注atexit注册与资源初始化的时序问题,作为类似场景的参考模式。

讨论亮点

review中仅gemini-code-assist[bot]提供了自动生成的评论,确认变更目的并指出无反馈。没有人工review讨论,表明这是一个简单直接的修复,团队认可其必要性。

实现拆解

在python/sglang/srt/entrypoints/engine.py文件的Runtime.__init__方法中,在atexit.register(self.shutdown)调用前添加一行self.tokenizer_manager = None。这确保shutdown方法在任何情况下都能安全访问该属性,避免AttributeError。

文件 模块 状态 重要度
python/sglang/srt/entrypoints/engine.py engine modified 6.0

关键符号

Runtime.__init__ Runtime.shutdown

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

评论区精华

预初始化 tokenizer_manager 的必要性 正确性

gemini-code-assist[bot] 确认变更确保 shutdown 方法在引擎初始化失败时不会遇到 AttributeError。

结论:变更被接受,无争议。 · 已解决

风险与影响

风险极低:仅添加一行初始化语句,不改变现有逻辑。shutdown方法中已有if self.tokenizer_manager is not None检查,预置None不会影响正常流程。但需确认tokenizer_manager在其他地方是否依赖非None初始值(从代码看没有)。

影响范围小:仅修复边缘情况下的异常处理,避免引擎初始化失败时产生额外AttributeError,提升错误处理的健壮性。对用户无感知,对系统稳定性有轻微正面影响。

边缘场景修复

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论