执行摘要
- 一句话:清理调度器中的死代码赋值
- 推荐动作:该 PR 是低风险的清理工作,无需深入审查。但可作为理解 Scheduler 中 prefill 统计信息演进历史的参考:从
self.adder 等临时存储迁移到 new_batch.prefill_stats 对象化。
功能与动机
PR 描述指出:这些写操作用于捕获局部 prefill builder 状态供其他读取者使用,但整个代码库中已无任何地方读取 self.adder、self.can_run_list、self.running_bs。它们是旧的临时存储,已被 new_batch.prefill_stats = PrefillStats.from_adder(adder, ...) 替代。删除它们可以消除死代码,提高可维护性。
实现拆解
- 在
python/sglang/srt/managers/scheduler.py 的 Scheduler._get_new_batch_prefill_raw 方法末尾,定位到三行 self.adder = adder、self.can_run_list = can_run_list、self.running_bs = len(self.running_batch.reqs) 的赋值语句。
- 通过全仓 grep 确认无任何其他代码读取这三个属性,确认其已死。
- 直接删除这三行代码(共 5 行,含注释),其余逻辑保持不变。
- 未引入任何测试变更,因为删除死代码无需新增测试。
关键文件:
python/sglang/srt/managers/scheduler.py(模块 调度器;类别 source;类型 core-logic;符号 _get_new_batch_prefill_raw): 唯一变更文件,删除了 _get_new_batch_prefill_raw 方法末尾的三行死代码赋值。
关键符号:Scheduler._get_new_batch_prefill_raw
关键源码片段
python/sglang/srt/managers/scheduler.py
唯一变更文件,删除了 _get_new_batch_prefill_raw 方法末尾的三行死代码赋值。
# 以下为变更前代码(删除的三行)
# 注释 : 之前用于记录 prefill 统计信息,现已无读者
# self.adder = adder
# self.can_run_list = can_run_list
# self.running_bs = len(self.running_batch.reqs)
# 清理后,prefill 统计信息已通过以下方式附加到 batch 上 :
new_batch.prefill_stats = PrefillStats.from_adder(
adder,
self.running_batch.reqs,
self.enable_priority_scheduling,
num_pending_tokens=self._get_num_pending_tokens(...)
)
评论区精华
该 PR 的 review 评论数量为 0,提交历史仅 1 个 commit,无讨论。作者 fzyzcjy 同时也是合并者,表明这是一个自审查的机械式清理变更。
风险与影响
- 风险:风险极低。删除的代码是已无读者的写操作,不影响任何读取路径。但若未来有其他代码误引这些属性,可能会出现 AttributeError。不过由于这些属性从未被正式定义为类属性,之前也只是在方法内赋值,因此即使保留也极易被遗忘。总体风险可忽略。
- 影响:影响范围仅限于
python/sglang/srt/managers/scheduler.py 中的一个方法,删除 5 行代码。无功能影响、无性能影响、无 API 变更。对用户透明,对开发者仅意味着少维护一些死代码。
- 风险标记:极小变更
关联脉络
- PR #25435 Replace single-line defensive getattrs with direct access: 同属清理死代码和防御性编程的系列重构,且都涉及 scheduler 文件。
- PR #25437 Drop dead hasattr guards (hisparse_coordinator, metrics_collector): 同样删除调度器中的死代码守卫,属于同一个清理方向。
参与讨论