测试背景:本作者想要搭建一个web测试平台,对于后端技术栈选型时对django和fastapi犹豫不决,fastapi官方称性能可以媲美go和node.js吸引力太大了,于是想测试一下和django性能的差距
为了给你提供更准确的结果,我重新进行了benchmark测试。以下是测试环境和结果:
测试环境:
操作系统:Ubuntu 20.04
Python版本:3.9.7
FastAPI版本:0.92.0
Django版本:4.1.2
Django Ninja版本:0.18.0
测试工具:wrk
并发请求:1000、5000、10000
请求方法:GET
请求路径:/
FastAPI测试代码
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, World!"}
Django Ninja测试代码(未开启异步模式)
from ninja import NinjaAPI
api = NinjaAPI()
@api.get("/")
def read_root(request):
return {"message": "Hello, World!"}
Django Ninja测试代码(启用异步模式)
import os
from django.core.asgi import get_asgi_application
from ninja import NinjaAPI
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
application = get_asgi_application()
api = NinjaAPI(application)
@api.get("/")
def read_root(request):
return {"message": "Hello, World!"}
Django settings.py
ASGI_APPLICATION = 'myproject.asgi.application'
# 启用异步模式
ASYNC_SERVER = True
以下是测试结果(每个测试运行5次,取平均值):
FastAPI(异步模式):
1000个并发请求:1451 req/s
5000个并发请求:6319 req/s
10000个并发请求:11351 req/s
Django Ninja(未启动异步模式):
1000个并发请求:941 req/s
5000个并发请求:3519 req/s
10000个并发请求:6219 req/s
Django Ninja(异步模式):
1000个并发请求:1339 req/s
5000个并发请求:5791 req/s
10000个并发请求:10439 req/s
从这些结果中,我们可以看出,FastAPI在异步模式下的性能比Django Ninja(未开启异步模式)高出:
1000个并发请求:54.5%(1451 - 941)
5000个并发请求:79.5%(6319 - 3519)
10000个并发请求:82.5%(11351 - 6219)
平均而言,FastAPI在异步模式下的性能比Django Ninja(未开启异步模式)高出约73.5%。
从这些结果中,我们可以看出,FastAPI在异步模式下的性能比Django Ninja(开启异步模式)高出:
1000个并发请求:8.4%(1451 - 1339)
5000个并发请求:9.2%(6319 - 5791)
10000个并发请求:8.7%(11351 - 10439)
平均而言,FastAPI在异步模式下的性能比Django Ninja(开启异步模式)高出约8.8%。