用于 Python 的 ASGI Web 服务器。
文档:https://www.uvicorn.org
Uvicorn 是 Python 的 ASGI Web 服务器实现。
直到最近,Python 还缺乏用于异步框架的最小低级服务器/应用程序接口。 ASGI 规范填补了这一空白,这意味着我们现在能够开始构建一组可在所有异步框架中使用的通用工具。
Uvicorn 支持 HTTP/1.1 和 WebSockets。
使用pip
安装:
$ pip install uvicorn
这将安装具有最小(纯 Python)依赖项的 uvicorn。
$ pip install ' uvicorn[standard] '
这将安装带有“基于 Cython”依赖项(如果可能)和其他“可选附加组件”的 uvicorn。
在这种情况下,“基于 Cython”的含义如下:
uvloop
。httptools
处理。此外,“可选附加功能”意味着:
websockets
处理(如果您想使用wsproto
则需要手动安装它)。--reload
标志将使用watchfiles
。colorama
。--env-file
选项,将会安装python-dotenv
。PyYAML
以允许您向--log-config
提供.yaml
文件。在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
大多数成熟的 Python Web 框架都是从基于 WSGI 的框架开始的。
WSGI 应用程序是一个单一的、同步的可调用程序,它接受请求并返回响应。这不允许长期连接,就像长轮询 HTTP 或 WebSocket 连接一样,而 WSGI 对此支持不佳。
拥有异步并发模型还允许诸如轻量级后台任务之类的选项,并且对于在网络 I/O 上长时间被阻止(例如处理缓慢的 HTTP 请求)的端点来说,可以减少限制因素。
ASGI 协议的优势在于它将服务器实现与应用程序框架分离。这允许互操作网络服务器和应用程序框架的生态系统。
第一个 ASGI 服务器实现是 Daphne Web 服务器,最初是为支持 Django Channels 而开发的。
它在生产中广泛运行,并支持 HTTP/1.1、HTTP/2 和 WebSockets。
此处给出的任何示例应用程序都同样可以使用daphne
来运行。
$ pip install daphne
$ daphne app:App
Hypercorn 最初是 Quart Web 框架的一部分,后来被分离成独立的 ASGI 服务器。
Hypercorn 支持 HTTP/1.1、HTTP/2 和 WebSocket。
它还支持优秀的trio
async 框架,作为asyncio
的替代方案。
$ pip install hypercorn
$ hypercorn app:App
Mangum 是一个适配器,用于将 ASGI 应用程序与 AWS Lambda 和 API Gateway 结合使用。
Granian 是一个兼容 ASGI 的 Rust HTTP 服务器,支持 HTTP/2、TLS 和 WebSockets。
Uvicorn 是 BSD 许可代码。
精心设计和制作。
—? —