用於 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 許可代碼。
精心設計和製作。
—? —