Prhub

#46627 [Bug] Fix `IndentationError: expected an indented block after 'with' statement`

原始 PR 作者 yewentao256 合并时间 2026-06-24 23:14 文件变更 1 提交数 3 评论 2 代码增减 +2 / -7

执行摘要

修复 core.py 中缩进错误导致的启动失败

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

建议立即合并,属于阻断性 bugfix。同时建议后续 PR 增加 CI 中 Python 语法检查(如 flake8)以提前捕获类似问题。

讨论亮点

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

实现拆解

  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 引擎核心 modified 5.52

关键符号

run_busy_loop

关键源码片段

vllm/v1/engine/core.py core-logic

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

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 ...

评论区精华

正确的条件判断方式 设计

@aoshen02 指出应直接使用 `self.model_executor.is_sleeping` 而非嵌套两个条件。

结论:采用直接判断方式,移除冗余嵌套。 · 已解决

Pre-commit 问题 other

@jeejeelee 提醒修复 pre-commit 检查。

结论:补丁已通过 pre-commit。 · 已解决

风险与影响

低风险。变更仅为语法修正和逻辑简化,无功能语义变更。但需确保 model_executor.is_sleeping 属性的调用正确(原为 is_sleeping() 方法,现在改为直接访问属性,需确认类型一致)。

修复后 vllm 能正常启动,避免因 IndentationError 导致服务不可用。影响范围限于数据并行模式下的空闲循环路径。

缺少测试覆盖 语法级变更但涉及核心路径

关联 Issue

未识别关联 Issue

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

完整报告

参与讨论