Python 異步 ASGI 服務器及框架


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 的安裝,

pip install uvicorn

我們可以自己編寫一個異步的服務,同時使用 uvicorn 來運行,比如新建一個 demo.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 demo:app

服務啟動之后,我們通過瀏覽器就能方位該服務,默認端口 8000

Daphne

Daphne 服務器是最早為 Django Channels 提供支持的 ASGI 服務器

Daphne 它在生產中廣泛運行,並支持HTTP / 1.1,HTTP / 2和 WebSockets。

安裝和運行的命令如下:

pip install daphne
daphne app:App

和 uvicorn 命令類似,app 是文件名稱,APP 是應用程序

Hypercorn

Hypercorn 最初是框架 Quart 的一部分,然后被分離為獨立的 ASGI 服務器

同樣的,Hypercorn 支持 HTTP/1.1, HTTP/2, 以及 WebSockets.

安裝和運行的命令如下:

pip install hypercorn
hypercorn app:App

說了 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 服務:

from quart import Quart

app = Quart(__name__)

@app.route('/')
async def hello():    
    return 'hello'app.run()

和 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。

swagger-ui

作者:華為雲特約供稿開發者  Python編程與實戰

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM