使用 FastAPI 和 Python 请求上传 100 MB 文件大约需要 128 秒,明显慢于使用 Flask 时需要 0.5 秒。
上传时间的差异主要是由于与 Flask 相比,FastAPI 中处理数据的方式造成的。处理文件上传时,FastAPI 使用 SpooledTemporaryFile 来存储传入请求数据,默认最大大小为 1 MB。当文件大小超过 1 MB 时,数据将写入磁盘上的临时文件,从而导致上传过程变慢。
1.同步文件写入
使用常规def关键字而不是async def关键字定义端点并同步写入文件。
2.异步写入(使用aiofiles)
使用async def关键字定义端点,并使用aiofiles进行异步文件写入。此方法需要等待文件操作完成。
3.使用 request.stream()
使用 request.stream() 以流形式访问请求正文。此方法允许处理大块数据,而无需将整个正文存储在内存或磁盘上,从而提高上传性能。
为了在上传较大文件时获得最佳性能,请考虑使用该请求.stream() 方法。这种方法绕过了 1 MB 最大大小限制,并允许直接处理数据块,而无需额外的写入/读取操作。
以上是为什么FastAPI的UploadFile比Flask慢?的详细内容。更多信息请关注PHP中文网其他相关文章!