# PR #46627 完整报告

- 仓库：`vllm-project/vllm`
- 标题：[Bug] Fix `IndentationError: expected an indented block after 'with' statement`
- 合并时间：2026-06-24 23:14
- 原文链接：http://prhub.com.cn/vllm-project/vllm/pull/46627

---

# 执行摘要

- 一句话：修复 core.py 中缩进错误导致的启动失败
- 推荐动作：建议立即合并，属于阻断性 bugfix。同时建议后续 PR 增加 CI 中 Python 语法检查（如 flake8）以提前捕获类似问题。

# 功能与动机

PR #44483 引入的变更导致 vllm 启动时出现 IndentationError，阻止了 async_llm 的导入。错误堆栈显示在 vllm/v1/engine/core.py 第 1959 行触发，PR body 中明确引用了该问题。

# 实现拆解

1. 移除 `run_busy_loop` 方法中嵌套的 `if not self.model_executor.is_sleeping` 层：原代码在 `elif not self.is_sleeping():` 下的 `with` 块内又嵌入了一个条件判断，导致语法错误。现在直接将 `elif` 条件改为 `elif not self.model_executor.is_sleeping`，去掉多余的嵌套。
2. 更新注释：去除对 `is_sleeping()` 和 KV-offload 窗口的冗余描述，精简为“unless the engine is sleeping.”。
3. 合并 dummy batch 执行逻辑：原本需要两步检查（是否整体睡眠 + 模型执行器是否睡眠），现在统一由 `model_executor.is_sleeping` 决定，简化控制流。

关键文件：
- `vllm/v1/engine/core.py`（模块 引擎核心；类别 source；类型 core-logic；符号 run_busy_loop）: 包含 IndentationError 的根本原因代码，修复后控制流简化且语法正确。

关键符号：run_busy_loop

## 关键源码片段

### `vllm/v1/engine/core.py`

包含 IndentationError 的根本原因代码，修复后控制流简化且语法正确。

```python
def run_busy_loop(self):
    """Core busy loop of the EngineCore for data parallel case."""
    while self._handle_shutdown():
        self._process_input_queue()
        self._maybe_publish_request_counts()

        # ... EEP scaling state handling ...

        executed = self._process_engine_step()
        self._maybe_publish_request_counts()

        local_unfinished_reqs = self.scheduler.has_unfinished_requests()
        if not executed:
            if not local_unfinished_reqs and not self.engines_running:
                # All engines are idle.
                continue

            # Execute a dummy pass when no ready requests ran, unless the
            # engine is sleeping.
            elif not self.model_executor.is_sleeping:
                with self.log_iteration_details(None):
                    self.execute_dummy_batch()

        # ... all-reduce and wave completion logic ...

```

# 评论区精华

Issue 评论中 @aoshen02 承认了问题并指出正确写法应为 `elif not self.model_executor.is_sleeping`，与最终补丁一致。@jeejeelee 提醒同时修复 pre-commit 问题。

- 正确的条件判断方式 (design): 采用直接判断方式，移除冗余嵌套。
- Pre-commit 问题 (other): 补丁已通过 pre-commit。

# 风险与影响

- 风险：低风险。变更仅为语法修正和逻辑简化，无功能语义变更。但需确保 `model_executor.is_sleeping` 属性的调用正确（原为 `is_sleeping()` 方法，现在改为直接访问属性，需确认类型一致）。
- 影响：修复后 vllm 能正常启动，避免因 IndentationError 导致服务不可用。影响范围限于数据并行模式下的空闲循环路径。
- 风险标记：缺少测试覆盖 , 语法级变更但涉及核心路径

# 关联脉络

- PR #44483 [Bugfix] Fix illegal memory access from a forward during a partial wake_up: 该 PR 引入了导致 IndentationError 的代码，本 PR 是对其的语法修正。