FastAPI大文件上传在到达端点前偶尔挂起

0 投票
0 回答
27 浏览
提问于 2025-04-12 07:01

我在使用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 个回答

暂无回答

撰写回答