【python】FastAPI简介
1. FastAPI 简介
FastAPI 是一个基于 Python 3.7+ 的现代 Web 框架,用于快速开发高性能 API。它的设计目标是 高性能、易用性、自动化文档生成,在 Web 后端和微服务场景中非常流行。
主要特点
- 高性能:基于 ASGI 架构,性能接近 Node.js 和 Go。
- 自动文档:内置 Swagger UI / ReDoc。
- 数据校验:依赖 Pydantic,自动进行 JSON 转换与验证。
- 异步支持:原生支持
async/await
,适合高并发。 - 开发效率高:充分利用 Python 类型提示,IDE 体验优异。
2. FastAPI 为什么快?核心原理
FastAPI 的高性能来自以下几个方面:
-
ASGI 架构
- 基于 Starlette,支持异步 I/O。
- 类似 Node.js 的事件循环,一个进程可处理成千上万个请求。
-
Pydantic 加速
- 使用类型注解定义数据模型,自动完成数据校验。
- 内部大量基于 Cython 优化,JSON 解析和数据转换速度快。
-
Uvicorn 服务器
- 基于
uvloop
(Cython 实现的事件循环)和httptools
(C 语言 HTTP 解析器)。 - 请求处理效率远高于 Flask/Django 的 WSGI。
- 基于
-
高效路由
- Starlette 路由系统采用高效匹配算法(Trie-like),比正则匹配更快。
-
启动时预编译
- 路由和文档在启动阶段就生成,运行时无需额外开销。
3. Uvicorn 简介与用法
Uvicorn 是一个 ASGI 服务器,通常与 FastAPI 搭配使用。
常用命令
uvicorn main:app --reload --host 0.0.0.0 --port 8000
参数解释:
main:app
:模块名:FastAPI 实例。--reload
:开发环境热重载。--workers 4
:生产环境启动 4 个并发进程。
生产部署
在生产环境中推荐:
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
或者配合 Gunicorn:
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
4. Gunicorn 简介
Gunicorn(Green Unicorn) 是一个 Python WSGI HTTP 服务器,常用于部署 Flask、Django 应用。
核心特点
- 多进程模型(pre-fork),master/worker 架构。
- 稳定、成熟,广泛应用于生产环境。
- 支持多种 worker 类型(同步、异步、gevent、eventlet)。
常用命令
gunicorn app:app -w 4 -b 0.0.0.0:8000
与 FastAPI 搭配
Gunicorn 可作为进程管理工具,结合 Uvicorn Worker 使用:
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000
5. WSGI 与 ASGI
在 Python Web 应用中,WSGI 与 ASGI 是两个关键的接口标准。
全称
- WSGI:Web Server Gateway Interface(Web 服务器网关接口)
- ASGI:Asynchronous Server Gateway Interface(异步服务器网关接口)
区别对比
特性 | WSGI | ASGI |
---|---|---|
协议年代 | 早期(PEP 3333) | 新一代(PEP 4843) |
并发模式 | 同步 | 同步 + 异步 |
支持的功能 | HTTP 请求 | HTTP、WebSocket、长连接、HTTP/2 |
适用框架 | Flask、Django(早期) | FastAPI、Starlette、Django 3.0+ |
性能瓶颈 | 阻塞,难以支撑高并发 | 原生异步,适合高并发 |
6. 总结
- FastAPI:现代高性能 Web 框架,基于 ASGI,特点是快、简洁、文档自动化。
- Uvicorn:运行 FastAPI 的 ASGI 服务器,轻量高效。
- Gunicorn:经典 WSGI 服务器,可作为进程管理工具,与 Uvicorn Worker 搭配使用。
- WSGI vs ASGI:WSGI 是老一代同步协议,ASGI 是新一代异步协议,FastAPI 正是依赖 ASGI 才能高性能。
✅ 在生产环境中,最佳实践通常是:
Nginx → Gunicorn(进程管理) → Uvicorn(ASGI 运行) → FastAPI 应用