Python 如何在FastAPI中设置响应类?
使用序列化响应对restful服务的速度有显著的影响,特别是对于非常大的对象。正如我在官方文章中读到的,我们可以直接使用响应类作为api方法的参数。问题是,当我直接使用Python 如何在FastAPI中设置响应类?,python,serialization,fastapi,orjson,Python,Serialization,Fastapi,Orjson,使用序列化响应对restful服务的速度有显著的影响,特别是对于非常大的对象。正如我在官方文章中读到的,我们可以直接使用响应类作为api方法的参数。问题是,当我直接使用或jsonresponse作为函数时,它会工作;但是,将其传递到参数esponse\u class=ORJSONResponse时,它不起作用 1.直接调用或jsonresponse()的示例代码: 此代码在75ms中运行,大小6.6mb,显示orjson序列化工作正常。 它比.NETCore快,这正是我所需要的 from fas
或jsonresponse
作为函数时,它会工作;但是,将其传递到参数esponse\u class=ORJSONResponse
时,它不起作用
1.直接调用或jsonresponse()
的示例代码:
此代码在75ms中运行,大小6.6mb,显示orjson序列化工作正常。
它比.NETCore快,这正是我所需要的
from fastapi import APIRouter
from fastapi.responses import ORJSONResponse
router=APIRouter()
__all__=["router"]
siz=1000000
ret=[None]*siz
for i in range(0,siz-1):
ret[i]=i
@router.get("/planlist"))
def plan_list():
ORJSONResponse(ret)
2.传递或JsonResponse
作为参数的示例代码:
这段代码运行起来就像没有设置响应类一样。在相同的6.6MB大小中,876ms所需时间是10倍以上。它显示或json
未正确设置
from fastapi import APIRouter
from fastapi.responses import ORJSONResponse
router=APIRouter()
__all__=["router"]
siz=1000000
ret=[None]*siz
for i in range(0,siz-1):
ret[i]=i
@router.get("/planlist",response_class=ORJSONResponse)
def plan_list():
for i in range(0,siz-1):
ret[i]=i
return ret
测试平台
- 测试客户端:ansomnia core 2020.4.1,与postman 7.34.0中的结果相同
- 操作系统:MacOS catalina 10.15.7,windows 10的结果相同
- cpu:核心i9
此外,我们还提供了有关的文档 所以你可以用这个,这不是一个坏习惯
返回ORJSONResponse(内容=数据)
但这将跳过验证、序列化和自动文档,这将为您提供巨大的灵活性和性能,但这也意味着,您需要确保内容已准备就绪,并且需要手动设计OpenAPI模式。第二个示例中的for循环可能会导致这一巨大差异。否则,这就太奇怪了。感谢您的回答,在这种情况下是的,因为数据量大,时间比验证更重要。所以验证主要需要在这里输入,然后输出。对于语句,我已经在模块全局范围内的方法一侧设置了它,当它被称为数据时,数据就准备好了。这不会引起太大的尊重。