# PR #25610 完整报告

- 仓库：`sgl-project/sglang`
- 标题：Move request-ingress methods to SchedulerRequestReceiver
- 合并时间：2026-05-18 18:31
- 原文链接：http://prhub.com.cn/sgl-project/sglang/pull/25610

---

# 执行摘要

- 一句话：将请求接收方法从 Scheduler 移至 SchedulerRequestReceiver
- 推荐动作：值得阅读作为理解调度器组件拆分系列的标准案例，展示了如何将 @staticmethod 迁移到独立组件中，并调整调用契约。

# 功能与动机

作为调度器重构的一环，将混入（mixin）方法逐步迁移到独立组件，使 Scheduler 类变得更轻量，职责更清晰。PR body 说明是 'Mechanical cut + paste'，对应初步引入 SchedulerRequestReceiver 的机制。

# 实现拆解

1. 在 `python/sglang/srt/managers/scheduler_components/request_receiver.py` 中添加 `recv_limit_reached`、`recv_requests`、`_split_work_and_control_reqs` 三个方法，并补全必要的导入（如 `broadcast_pyobj`、`point_to_point_pyobj` 等）。
2. 从 `python/sglang/srt/managers/scheduler.py` 中删除这三个方法的定义及相关导入（`has_shm_features`、`unwrap_shm_features`、`broadcast_pyobj`、`point_to_point_pyobj`），并将调用点从 `self.recv_requests(self.request_receiver, ...)` 改为 `self.request_receiver.recv_requests(...)`。
3. 在剩余 5 个调用文件（`scheduler_pp_mixin.py`、`mlx/scheduler_mixin.py`、`disaggregation/decode.py`、`disaggregation/prefill.py`、`multiplexing_mixin.py`）中同步更新调用方式。
4. 无测试或配置修改，方法体保持字节一致。

关键文件：
- `python/sglang/srt/managers/scheduler_components/request_receiver.py`（模块 请求接收；类别 source；类型 dependency-wiring；符号 recv_limit_reached, recv_requests, _split_work_and_control_reqs）: 主要迁移目标文件，新增三个方法，补全了依赖导入，成为请求接收的核心组件。
- `python/sglang/srt/managers/scheduler.py`（模块 调度器；类别 source；类型 dependency-wiring；符号 recv_limit_reached, recv_requests, _split_work_and_control_reqs）: 源文件被大幅简化：删除三个方法定义及相关导入，减少约 200 行，并更新调用方式。
- `python/sglang/srt/managers/scheduler_pp_mixin.py`（模块 调度器；类别 source；类型 core-logic）: 更新了 pipeline parallelism 中三处（unified/disagg_prefill/disagg_decode）的调用点。
- `python/sglang/srt/hardware_backend/mlx/scheduler_mixin.py`（模块 调度器；类别 source；类型 core-logic）: 更新 MLX 硬件后端的循环中调用点。
- `python/sglang/srt/disaggregation/decode.py`（模块 调度器；类别 source；类型 core-logic）: 更新 disaggregation decode 循环中的调用点（两种模式）。
- `python/sglang/srt/disaggregation/prefill.py`（模块 调度器；类别 source；类型 core-logic）: 更新 disaggregation prefill 循环中的调用点（两种模式）。
- `python/sglang/srt/multiplex/multiplexing_mixin.py`（模块 调度器；类别 source；类型 core-logic）: 更新 multiplexing mixin 中的调用点。

关键符号：recv_requests, recv_limit_reached, _split_work_and_control_reqs


# 评论区精华

无实质性 review 讨论，仅 bot 自动评论表示无反馈。此变更为纯机械迁移，社区无争议。

- 机械迁移无争议 (other): 变更被接受，无修改要求。

# 风险与影响

- 风险：风险极低：方法体字节一致，仅位置移动；但需确保 7 个文件中所有调用处均已更新，且新文件包含了所有必需的导入（已检查）。潜在风险：若未来逻辑变更后忘记在此组件同步更新，但当前无此隐患。
- 影响：对用户无行为影响；对开发者，Scheduler 类减少约 200 行代码，职责更聚焦；后续请求接收逻辑可直接在 SchedulerRequestReceiver 中修改，不影响调度主循环。
- 风险标记：机械重构 , 多文件修改 , 无逻辑变更

# 关联脉络

- PR #25619 Add SchedulerPoolStatsObserver and route pool-stats state through it: 同为调度器组件化系列，将 pool-stats 从 mixin 移至独立组件。
- PR #25634 Stand up SchedulerOutputStreamer; migrate output-streaming state to it: 类似的操作：将输出流状态迁移到独立组件。
- PR #25638 Move module-level helpers out of scheduler.py: 同样是从 scheduler.py 向外迁移辅助函数，进一步简化 Scheduler。