FastAPI大文件上传在到达端点前偶尔挂起
我在使用FastAPI上传比较大的文件(大约3.6MB)时遇到了一些间歇性的问题。和总是失败或成功的情况不同,这些上传有时会在请求到达处理代码之前就卡住,持续很长时间。这种不稳定的情况发生时,代码和环境都没有任何变化,这让人很难找到具体的原因。
环境: 使用FastAPI和Uvicorn作为ASGI服务器。
问题描述: 只有在上传较大的文件(大约3.6MB)时,请求有时会在执行任何端点代码之前就卡住。对于较小的文件(大约6KB),从来没有出现过这个问题。
症状: 请求并不是总是卡住的,偶尔发生。当它卡住时,确实是在到达端点之前,因为在端点内部的日志或打印语句都没有被执行。
from fastapi import FastAPI, File, UploadFile
import uvicorn
from uvicorn.config import Config
import asyncio
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
print("This print statement does not execute when the issue occurs.")
await asyncio.sleep(5) # Simulate processing delay
return {"message": "Success"}
if __name__ == "__main__":
config = Config(app=app, host="0.0.0.0", port=3092, log_level="info")
server = uvicorn.Server(config=config)
server.run()
调试努力: 我尝试使用aiofiles实现异步文件保存,以减少可能的内存问题和阻塞IO问题,但没有成功解决这个问题。 我将日志级别提高到DEBUG,发现当卡住发生时,multipart数据的请求处理并没有完成。具体来说,multipart处理开始了,但在出现问题的请求中停止了,没有完成。
0 个回答
暂无回答