ASGI
在 Python3.5 之後增加 async/await 特性之後,異步編程變得異常火爆,越來越多開發者投入異步的懷抱。
直到最近,Python 仍缺乏用於 asyncio 框架的最低限度的低級服務器/應用程序接口。
而 ASGI 協議規範的出現填補了這一空白,這意味著我們現在能夠開始構建可在所有異步框架中使用的通用工具集
ASGI(異步服務器網關接口)是WSGI的精神繼承者,旨在在具有異步功能的Python Web服務器,框架和應用程序之間提供標準接口。
”
有關同步生態中的服務器及 WSGI 請查看文末推薦的以前寫的相關文章
ASGI 服務器
Uvicorn
Uvicorn 是一個快速的 ASGI 服務器,Uvicorn 是基於 uvloop 和 httptools 構建的,是 Python 異步生態中重要的一員。
Uvicorn 當前支持 HTTP / 1.1 和 WebSockets,將來計劃支持HTTP / 2。
版本要求 Python 3.5 以上,Uvicorn 的安裝,
<code>pip install uvicorn
/<code>
我們可以自己編寫一個異步的服務,同時使用 uvicorn 來運行,比如新建一個 demo.py,裡面代碼如下:
<code>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!',
})
/<code>
運行命令如下,
<code>uvicorn demo:app
/<code>
服務啟動之後,我們通過瀏覽器就能方位該服務,默認端口 8000
Daphne
Daphne 服務器是最早為 Django Channels 提供支持的 ASGI 服務器
Daphne 它在生產中廣泛運行,並支持HTTP / 1.1,HTTP / 2和 WebSockets。
安裝和運行的命令如下:
<code>pip install daphne
daphne app:App
/<code>
和 uvicorn 命令類似,app 是文件名稱,APP 是應用程序
Hypercorn
Hypercorn 最初是框架 Quart 的一部分,然後被分離為獨立的 ASGI 服務器
同樣的,Hypercorn 支持 HTTP/1.1, HTTP/2, 以及 WebSockets.
安裝和運行的命令如下:
<code>pip install hypercorn
hypercorn app:App
/<code>
說了 ASGI 服務器,接下來就是支持 ASGI 的框架了
ASGI 框架
您可以使用 Uvicorn,Daphne 或 Hypercorn 運行任何 ASGI 框架
對於小型服務,您也可以直接編寫 ASGI 應用程序。例如之前編寫的異步框架。
Python 中有以下幾個支持 ASGI 的異步框架
Starlette
Starlette 是一個輕量級的 ASGI 框架/工具包。它是構建高性能異步服務的理想選擇,並且支持 HTTP 和 WebSockets。
Django Channels
ASGI 規範最初是設計就是用於 Django Channels 的。
Channels 與其他ASGI框架略有不同,它在線程框架後端上提供了異步前端。
同時 Django Channels 支持 WebSocket,後臺任務和長期運行的連接,而應用程序代碼仍在標準線程上下文中運行
Quart
Quart 是一個類似於 Flask 的 ASGI Web 框架。Quart 不僅與 Flask 相似,而且與 Flask API 兼容!
該框架的作者希望保留了Flask 的風格,只是向其中添加異步、WebSocket 和 HTTP 2支持。
因此,你可以從 Flask 文檔中學習 Quart 的用法,只需要記住 Quart 中的函數是異步的就行。
一個簡單的 Quart 服務:
<code>from quart import Quart
app = Quart(__name__)
@app.route('/')
async def hello():
return 'hello'app.run()
/<code>
和 Flask 是不是很像,只是多了一個異步 async
由於 Quart 是從 Flask 中演進過來的,因此 Flask 的所有功能均可用:路由,中間件,會話,模板,藍圖等
FastAPI
FastAPI 是一個基於 Starlette 和 Pydantic 的 API 框架,其靈感來自以前的 APISta 服務器版本
您可以使用 Python 3.6+ 類型聲明編寫 API 函數參數,並獲得自動數據轉換,數據驗證。
FastApi 最主要的特點是快,非常高的性能,向 NodeJS 和 Go 看齊,現有最快的Python框架之一
同時它可以自動生成交互式 API 文檔 UI,編寫 API 接口後,你就可以使用符合標準的 UI 如 SwaggerUI,ReDoc 等來使用 API。
閱讀更多 sandag 的文章