FastAPI接收Base64请求响应过慢问题求助
问题分析与解决方案
核心原因
你的代码和测试场景存在两个潜在问题,导致Swagger UI中响应延迟:
- 异步端点包含纯同步代码:你用
async def定义端点,但内部没有任何异步操作(无await语句)。这种情况下,FastAPI会把同步代码直接运行在ASGI事件循环中,虽然单请求处理逻辑执行很快,但可能阻塞事件循环,拖慢响应返回的时机。 - Swagger UI的大请求体处理开销:你的请求体包含1.4MB左右的字符串,Swagger UI在发送大请求、渲染响应时,浏览器层面会有额外的处理开销,导致你感知到响应延迟(但服务器实际已经完成处理)。
解决方案
1. 改用同步端点(最直接有效)
将async def改为def,FastAPI会自动把同步端点的代码放到线程池中执行,不会阻塞事件循环,确保处理完成后快速返回响应:
# pip install fastapi # fastapi dev main.py from fastapi import FastAPI from typing import Any, Dict app = FastAPI() @app.post("/fast") def root(data:Dict[Any,Any]): # 移除async关键字 doc = data['doc'] print(len(doc)) # 1459305 return {"success":len(doc)}
2. 绕过Swagger UI验证真实响应速度
用curl或Postman等工具直接发送请求,排除Swagger UI的前端影响:
curl -X POST "http://localhost:8000/fast" -H "Content-Type: application/json" -d '{"doc":"JVBERi0xLjMgCjEgMCBvYmoKPDwK..<-- 1459305 total chars-- >.Tk2MzU1NTM4OTY4NGIzYTBlNjIwZjA+XQo+PgpzdGFydHhyZWYKMTA5MzMzNQolJUVPRgo="}'
如果这个请求能快速返回,说明问题出在Swagger UI的前端处理,而非服务器逻辑。
3. 调整Uvicorn服务器设置(可选)
如果是服务器层面的传输延迟,可以在启动时调整Uvicorn参数,比如增加多进程或延长超时时间:
fastapi dev main.py --workers 2 --timeout-keep-alive 60
内容的提问来源于stack exchange,提问作者christopher johnson mccandless
相关产品推荐
相关产品推荐

