先说结论:在纯 API 高并发场景下,FastAPI 的吞吐量通常是 Django 的 2-3 倍(基于简单 JSON 响应基准),但 Django 在功能完整性和开发效率上更有优势。性能差异在 IO 密集型业务中往往被数据库瓶颈掩盖,选型应优先看业务需求。
- 性能表现:FastAPI 原生异步 + Pydantic V2(Rust 核心)验证效率更高
- 适用场景:高并发 API 网关选 FastAPI,复杂业务全栈应用选 Django
- 关键变量:数据库查询效率、同步/异步代码混用、服务器配置
基准测试环境与代码
要量化性能差异,需在相同硬件和网络环境下对比。以下是最小化可复现的代码示例,排除业务逻辑干扰,仅测试框架开销。
1. 环境配置
- Python 版本:3.10+
- 服务器:Uvicorn (FastAPI) vs Gunicorn + Uvicorn Worker (Django)
- 压测工具:wrk 或 Apache Bench (ab)
2. Django 视图代码 (views.py)
from django.http import JsonResponse
def performance_test(request):
# 直接返回 JSON,不涉及数据库查询
return JsonResponse({"status": "ok", "data": "benchmark"})3. FastAPI 路由代码 (main.py)
from fastapi import FastAPI
app = FastAPI()
@app.get("/performance_test")
async def performance_test():
# 异步接口,Pydantic V2 底层基于 Rust 优化
return {"status": "ok", "data": "benchmark"}压测命令与执行
使用 wrk 进行 HTTP 基准测试,保持连接数和线程数一致。确保服务端已启动且无其他负载。
1. 启动服务
- Django:
gunicorn -w 4 -k uvicorn.workers.UvicornWorker myproject.asgi:application - FastAPI:
uvicorn main:app `--host` 0.0.0.0 `--port` 8000 `--workers` 4
2. 执行压测
wrk -t12 -c400 -d30s http://127.0.0.1:8000/performance_test
参数说明:-t12 线程数,-c400 并发连接数,-d30s 持续时间。记录 Req/Sec 和 Latency。
性能数据参考
基于社区公开基准测试(如 TechEmpower)及典型本地测试环境,简单 JSON 响应场景下的性能表现参考如下:
| 框架 | 请求/秒 (RPS) | 平均延迟 | 备注 |
|---|---|---|---|
| FastAPI | 基准 100% | 较低 | 异步非阻塞,适合 IO 密集 |
| Django (WSGI) | 约 40%-60% | 较高 | 同步阻塞,线程开销大 |
| Django (ASGI) | 约 70%-80% | 中等 | 支持异步视图,但 ORM 仍多为同步 |
注意:实际业务中,若接口包含数据库查询(如 50ms+),框架本身的几毫秒差异会被掩盖,此时数据库优化优先级高于框架选型。
常见性能陷阱
陷阱一:异步框架中调用同步代码
在 FastAPI 的 async 函数中直接调用同步阻塞库(如标准 requests 或同步 ORM),会阻塞事件循环,导致性能甚至低于 Django。解决方案:使用 httpx 异步客户端或在线程池中运行同步代码。
陷阱二:Django 异步视图误用
Django 3.0+ 支持异步视图,但 ORM 查询默认是同步的。若在 async def 视图中调用同步 ORM,Django 会自动放入线程池,不会获得异步优势,反而增加上下文切换开销。
陷阱三:Pydantic 版本差异
FastAPI 依赖 Pydantic 进行数据验证。Pydantic V2 版本底层核心改用 Rust 重写,验证性能比 V1 提升显著。确保生产环境使用 Pydantic V2 以获取最佳性能。
陷阱四:忽略 Gunicorn 工作进程数
无论 Django 还是 FastAPI,单进程都无法利用多核 CPU。生产环境必须配合 Gunicorn 或 Uvicorn 多进程模式,进程数通常设置为 (CPU 核心数 * 2) + 1。
参考资源
- Django 官方文档:https://docs.djangoproject.com/
- FastAPI 官方文档:https://fastapi.tiangolo.com/
- TechEmpower Framework Benchmarks:https://www.techempower.com/benchmarks/
- Pydantic V2 发布说明:https://docs.pydantic.dev/latest/blog/pydantic-v2-alpha/