# 运行时错误：无法在同步应用中使用 ASGI 生命周期协议

- **ID:** `python/starlette-runtime-error-application-context`
- **领域:** python
- **类别:** runtime_error
- **验证级别:** ai_generated
- **修复率:** 80%

## 根因

Starlette 应用被配置为异步生命周期，但应用本身是同步函数

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| 3.10 | active | — | — |
| 3.11 | active | — | — |

## 解决方案

1. **将应用改为异步函数或使用同步生命周期** (90% 成功率)
   ```
   app = Starlette(routes=routes)  # 使用同步应用
或者
async def app(scope, receive, send): ...
   ```
2. **使用 starlette.applications.Starlette 的 lifespan 参数** (95% 成功率)
   ```
   async def lifespan(app):
    yield
app = Starlette(routes=routes, lifespan=lifespan)
   ```

## 无效尝试

- **移除 lifespan 参数但保留 async def 应用** — 应用仍为异步，但缺少生命周期管理，可能导致资源泄漏 (50% 失败率)
- **使用 sync_to_async 包装应用但未正确配置** — 包装后仍需要异步上下文，根本问题未解决 (75% 失败率)
