Python – 为什么使用 Uvicorn 运行 FastAPI 就快
本文结合网络资料与视频内容(如 B 站教程),系统解释为何使用 Uvicorn 运行 FastAPI 能达到高性能。
Video
https://www.bilibili.com/video/BV1Sj7xzEEmr/
🚀 Uvicorn 的作用:ASGI Web 服务器
Uvicorn 是遵循 ASGI(Asynchronous Server Gateway Interface)标准的轻量级 Web 服务器,其主要职责包括:
- 监听网络 socket,接收 HTTP/WebSocket 请求;
- 处理 I/O(高效使用
uvloop、httptools),并将请求交由 FastAPI/Starlette 来处理; - 执行异步事件循环,支持同时处理大量并发请求 (geeksforgeeks.org, stackoverflow.com, tutorialspoint.com)。
从本质上说,Uvicorn 是 FastAPI 与客户端(浏览器或 API 调用者)之间的桥梁 。
📈 ASGI vs WSGI:异步模式带来性能提升
- WSGI(如 Flask、Django 默认服务器)是同步接口,每个请求阻塞处理;
- ASGI 则支持异步,Uvicorn 利用它,允许事件循环并发执行多个协程,快速响应 I/O 密集任务 。
当你在 FastAPI 中调用 asyncio.sleep() 或异步操作时,Uvicorn 会在等待期间释放执行控制权,让事件循环去处理其他请求,充分提升并发性能 (reddit.com)。
🧠 非阻塞 vs 阻塞:线程与进程是如何协作的
- 同步端点如
time.sleep()会阻塞当前线程,但 Uvicorn 本身仍可接受其他连接,只要线程池未塞满 。 - 异步端点(
async def+await asyncio.sleep())不阻塞线程,协程挂起期间可切换上下文,让事件循环调度其它任务,支持高并发请求处理 。
🔧 高性能实现:uvloop、httptools 与多进程支持
- Uvicorn 内部使用 uvloop,替换默认 asyncio 异步循环,实现更高吞吐性能;
- 使用 httptools 高效解析 HTTP;
- 生产环境常配合 Gunicorn + UvicornWorker 或启动多个
--workers进程,充分利用多核 CPU (tutorialspoint.com, fastapi.tiangolo.com); - 单一进程通过事件循环已经能处理数百甚至上千 RPS(请求每秒),配合进程复用及缓存优化可进一步提升 (reddit.com)。
📊 真实应用:性能提升效果
- 在简单“Hello World”场景中,纯 Python 同步框架请求吞吐量有限,多进程下 FastAPI 快约数倍;
- 异步端点能力强大,可处理数百至上千并发连接,即使连接被挂起也不阻塞主循环 。
✅ 总结
- Uvicorn 是 FastAPI 的推荐 ASGI Web 服务器,实现了高效 I/O 调度;
- 异步模式(ASGI) 提升并发能力,尤其适合 I/O 密集场景;
- 线程 + 进程复用 架构确保同步代码也能并发执行;
- uvloop、httptools、多 worker 模型 联合发挥,整合后可达极高吞吐。
因此,Uvicorn + FastAPI 集成了现代异步编程模型与高效服务器实现,是 Python Web 服务中性能最强的方案之一。
Ref
- https://blog.csdn.net/kpc0564335/article/details/119403883
- https://juejin.cn/post/7472417685868986387
- https://fastapi.tiangolo.com/zh/deployment/manually/
- https://deepinout.com/fastapi/fastapi-questions/252_fastapi_python_how_to_use_fastapi_and_uvicornrun_without_blocking_the_thread.html
- https://www.w3ccoo.com/fastapi/fastapi_uvicorn.html
- https://www.cnblogs.com/yickel/p/18570584
- https://bbs.huaweicloud.com/blogs/440425
- https://blog.csdn.net/qq_33801641/article/details/120320780
- https://www.oryoy.com/news/kuai-su-shang-shou-jiao-ni-qing-song-jiang-fastapi-ying-yong-bu-shu-dao-uvicorn.html