使用奥尔森序列化响应对fastAPI restful服务的速度有显著的影响,特别是对于非常大的对象。正如我在官方文档中所看到的,我们可以直接使用响应类作为api方法的参数。问题是,当我将ORJSONResponse直接作为一个函数使用时,它可以工作;但是,当将它传递给参数esponse_class=ORJSONResponse时,它不能工作。
1.直接调用ORJSONResponse()的示例代码
此代码运行在75 MB中,大小为6.6MB的显示orjson序列化正常工作。它比.net内核更快,这正是我所需要的。
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.以传递ORJSONResponse作为参数的示例代码:
这段代码在没有响应类集的情况下运行。在相同的6.6MB大小下,它所需的876 ms要长10倍以上。它显示orjson没有被正确设置。
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测试平台
发布于 2020-10-17 23:49:40
此外,我们还有直接返回响应的文档。
所以你可以用这个,不坏的练习。
return ORJSONResponse(content=data)但是这将跳过验证、序列化和自动文档,这将为您提供巨大的灵活性和性能,但这也意味着您需要确保内容已经就绪,并且需要手动设计OpenAPI模式。
https://stackoverflow.com/questions/64408092
复制相似问题