优化 FastAPI 中的 JSON 数据检索速度
从 FastAPI 的 GET 端点返回相当大的 JSON 负载的速度缓慢是一个反复出现的问题。当使用 json.dumps() 通过 json.loads() 从文件传输数据时,响应会大大延迟。虽然返回数据可用于向用户发送数据,但有没有更有效的方法?
问题:
处理管道最初使用 pandas 的 to_json 将数据转换为 JSON () 函数,然后使用 json.loads() 将其加载到字典中,最后将其转换回 JSON。这种多步骤转换过程会带来相当大的延迟。
建议的解决方案:
首先,认识到 FastAPI 使用以下方法将返回值转换为 JSON 兼容的数据至关重要: jsonable_encoder,然后使用标准 Python 的 json.dumps() 函数进行序列化。众所周知,这个两步过程很慢。
选项 1:利用替代 JSON 编码器
考虑使用替代 JSON 编码器,例如 orjson 或 ujson。这些编码器的性能优于默认的 jsonable_encoder 和 json.dumps() 组合。
选项 2:直接返回自定义响应
为了获得最佳性能,请使用自定义 APIRoute 类并返回响应目的。这会绕过 FastAPI 的默认 JSON 转换过程。
<code class="python">from fastapi.routing import APIRouter, APIRoute class TimedRoute(APIRoute): ... app = FastAPI() router = APIRouter(route_class=TimedRoute) @router.get("/custom-response") def get_data(): df = pd.read_parquet('data.parquet') return Response(df.to_json(orient="records"), media_type="application/json") app.include_router(router)</code>
其他注意事项:
以上是如何优化FastAPI中的JSON数据检索速度?的详细内容。更多信息请关注PHP中文网其他相关文章!