想要用 Python 搞个高性能的 Web 服务?别再折腾 Flask 了,来试试 FastAPI 搭配 Uvicorn 吧!一个是现代化的 Web 框架,一个是极速的异步服务器,这组合简直是开发者的梦想组合!今天就带大家深入了解 Uvicorn,这个让 Python Web 应用飞起来的神器!🔥
什么是 Uvicorn?
Uvicorn 是一个基于 asyncio
开发的超快 ASGI(Asynchronous Server Gateway Interface)服务器。它构建在 uvloop
和 httptools
之上,体积小巧、效率极高。
Uvicorn 诞生是为了两个目的:
- 使用
uvloop
和httptools
打造一款极致性能的异步服务器。 - 实现一个基于 ASGI 的最小化应用接口,支持 HTTP、WebSocket、Pub/Sub 广播等协议,未来还可以拓展更多协议。
官方网站:www.uvicorn.org/
uvloop 和 httptools 是啥?
- uvloop:用 Cython 实现的
asyncio
事件循环,比标准的asyncio
快 2-4 倍,相当于给 Python 换上了超跑引擎。🏎️ - httptools:Node.js HTTP 解析器的 Python 版本,专门用来加速 HTTP 解析。
什么是 ASGI?
ASGI(Asynchronous Server Gateway Interface)是 Python Web 应用的新标准,弥补了 WSGI 不支持异步的缺陷。它支持 HTTP、HTTP2、WebSocket 等协议,让 Python 在高并发 Web 应用中与 Node.js 和 Go 一较高下!
详细协议文档:ASGI 官方文档 https://asgi.readthedocs.io/en/latest/specs/main.html
Uvicorn 的安装和使用
安装 Uvicorn
pip install uvicorn
写一个简单的应用
新建一个 example.py
文件:
async def app(scope, receive, send):
assert scope['type'] == 'http'
await send({
'type': 'http.response.start',
'status': 200,
'headers': [[b'content-type', b'text/plain']]
})
await send({
'type': 'http.response.body',
'body': b'Hello, world!'
})
启动服务器
uvicorn example:app --reload
example
是文件名(不带.py
)app
是我们定义的异步应用--reload
开启热重载,代码改动自动生效(开发阶段必备!)
脚本方式启动
import uvicorn
async def app(scope, receive, send):
...
if __name__ == "__main__":
uvicorn.run("example:app", host="127.0.0.1", port=8000, log_level="info")
更多命令
Uvicorn 支持多种启动命令,可通过以下方式查看:
uvicorn --help
常用命令参数:
--host
:绑定主机地址(默认 127.0.0.1)--port
:绑定端口(默认 8000)--reload
:开启热重载(开发环境强烈推荐)--workers
:指定工作进程数(生产环境推荐)--log-level
:设置日志级别(info、debug、warning)
配置和服务器实例化
更灵活的方式:
import uvicorn
async def app(scope, receive, send):
...
if __name__ == "__main__":
config = uvicorn.Config("main:app", port=5000, log_level="info")
server = uvicorn.Server(config)
server.run()
在已有的异步环境中运行:
import asyncio
import uvicorn
async def app(scope, receive, send):
...
async def main():
config = uvicorn.Config("main:app", port=5000, log_level="info")
server = uvicorn.Server(config)
await server.serve()
if __name__ == "__main__":
asyncio.run(main())
FastAPI + Uvicorn:最佳拍档
结合 FastAPI 使用:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
if __name__ == "__main__":
uvicorn.run(app, host="127.0.0.1", port=8000)
为什么 FastAPI 默认用 Uvicorn?
FastAPI 是一个现代、极速的 Web 框架,天生支持异步,性能炸裂。而 Uvicorn 又是专为异步而生的服务器。两者组合:
- 🚀 高性能:异步 I/O,轻松应对高并发。
- 🔒 新特性:支持 WebSocket、HTTP2。
- ⚙️ 易用性:安装简单,配置灵活。
简直是天作之合,谁用谁知道!🎉
结语
Uvicorn 不只是一个服务器,更是 Python 异步 Web 开发的一把利器。FastAPI + Uvicorn 让你的 Web 项目速度飞起,开发效率也跟着起飞!
赶紧试试吧,写点代码,跑起来,感受速度与激情吧!😎