Python 異步 ASGI 服務(wù)器及框架

      網(wǎng)友投稿 1308 2022-05-30

      ASGI

      在 Python3.5 之后增加 async/await 特性之后,異步編程變得異常火爆,越來越多開發(fā)者投入異步的懷抱。

      直到最近,Python 仍缺乏用于 asyncio 框架的最低限度的低級(jí)服務(wù)器/應(yīng)用程序接口。

      而 ASGI 協(xié)議規(guī)范的出現(xiàn)填補(bǔ)了這一空白,這意味著我們現(xiàn)在能夠開始構(gòu)建可在所有異步框架中使用的通用工具集

      ASGI(異步服務(wù)器網(wǎng)關(guān)接口)是WSGI的精神繼承者,旨在在具有異步功能的Python Web服務(wù)器,框架和應(yīng)用程序之間提供標(biāo)準(zhǔn)接口。

      ASGI 服務(wù)器

      Uvicorn

      Uvicorn 是一個(gè)快速的 ASGI 服務(wù)器,Uvicorn 是基于 uvloop 和 httptools 構(gòu)建的,是 Python 異步生態(tài)中重要的一員。

      Uvicorn 當(dāng)前支持 HTTP / 1.1 和 WebSockets,將來計(jì)劃支持HTTP / 2。

      Python 異步 ASGI 服務(wù)器及框架

      版本要求 Python 3.5 以上,Uvicorn 的安裝,

      pip install uvicorn

      我們可以自己編寫一個(gè)異步的服務(wù),同時(shí)使用 uvicorn 來運(yùn)行,比如新建一個(gè) 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!', })

      運(yùn)行命令如下,

      uvicorn demo:app

      服務(wù)啟動(dòng)之后,我們通過瀏覽器就能方位該服務(wù),默認(rèn)端口 8000

      Daphne

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

      Daphne 它在生產(chǎn)中廣泛運(yùn)行,并支持HTTP / 1.1,HTTP / 2和 WebSockets。

      安裝和運(yùn)行的命令如下:

      pip install daphne daphne app:App

      和 uvicorn 命令類似,app 是文件名稱,APP 是應(yīng)用程序

      Hypercorn

      Hypercorn 最初是框架 Quart 的一部分,然后被分離為獨(dú)立的 ASGI 服務(wù)器

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

      安裝和運(yùn)行的命令如下:

      pip install hypercorn hypercorn app:App

      說了 ASGI 服務(wù)器,接下來就是支持 ASGI 的框架了

      ASGI 框架

      您可以使用 Uvicorn,Daphne 或 Hypercorn 運(yùn)行任何 ASGI 框架

      對(duì)于小型服務(wù),您也可以直接編寫 ASGI 應(yīng)用程序。例如之前編寫的異步框架。

      Python 中有以下幾個(gè)支持 ASGI 的異步框架

      Starlette

      Starlette 是一個(gè)輕量級(jí)的 ASGI 框架/工具包。它是構(gòu)建高性能異步服務(wù)的理想選擇,并且支持 HTTP 和 WebSockets。

      Django Channels

      ASGI 規(guī)范最初是設(shè)計(jì)就是用于 Django Channels 的。

      Channels 與其他ASGI框架略有不同,它在線程框架后端上提供了異步前端。

      同時(shí) Django Channels 支持 WebSocket,后臺(tái)任務(wù)和長期運(yùn)行的連接,而應(yīng)用程序代碼仍在標(biāo)準(zhǔn)線程上下文中運(yùn)行

      Quart

      Quart 是一個(gè)類似于 Flask 的 ASGI Web 框架。Quart 不僅與 Flask 相似,而且與 Flask API 兼容!

      因此,你可以從 Flask 文檔中學(xué)習(xí) Quart 的用法,只需要記住 Quart 中的函數(shù)是異步的就行。

      一個(gè)簡單的 Quart 服務(wù):

      from quart import Quart app = Quart(__name__) @app.route('/') async def hello(): return 'hello'app.run()

      和 Flask 是不是很像,只是多了一個(gè)異步 async

      由于 Quart 是從 Flask 中演進(jìn)過來的,因此 Flask 的所有功能均可用:路由,中間件,會(huì)話,模板,藍(lán)圖等

      FastAPI

      FastAPI 是一個(gè)基于 Starlette 和 Pydantic 的 API 框架,其靈感來自以前的 APISta 服務(wù)器版本

      您可以使用 Python 3.6+ 類型聲明編寫 API 函數(shù)參數(shù),并獲得自動(dòng)數(shù)據(jù)轉(zhuǎn)換,數(shù)據(jù)驗(yàn)證。

      FastApi 最主要的特點(diǎn)是快,非常高的性能,向 NodeJS 和 Go 看齊,現(xiàn)有最快的Python框架之一

      同時(shí)它可以自動(dòng)生成交互式 API 文檔 UI,編寫 API 接口后,你就可以使用符合標(biāo)準(zhǔn)的 UI 如 SwaggerUI,ReDoc 等來使用 API。

      API HTTP Python

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:Git 分布式版本控制系統(tǒng)
      下一篇:揭開 Fiori 編程模型規(guī)范里注解的神秘面紗 - @ObjectModel
      相關(guān)文章
      亚洲午夜久久久久妓女影院| 色窝窝亚洲av网| MM1313亚洲精品无码久久| 亚洲中文字幕日本无线码| 亚洲AV无码成人专区片在线观看| 亚洲精品无码久久久久去q| 久久精品国产精品亚洲| 亚洲综合久久夜AV | 久久久久噜噜噜亚洲熟女综合| 亚洲AV无码成人精品区大在线 | jjzz亚洲亚洲女人| 老子影院午夜伦不卡亚洲| 亚洲heyzo专区无码综合| 亚洲heyzo专区无码综合| 美国毛片亚洲社区在线观看| 亚洲AV无码一区二区大桥未久| 亚洲中文字幕无码中文| 亚洲精华液一二三产区| 亚洲av午夜国产精品无码中文字| 亚洲免费综合色在线视频| 亚洲精品无码久久久久A片苍井空| 亚洲欧洲av综合色无码| 久久精品国产亚洲AV天海翼| 色噜噜噜噜亚洲第一| 另类专区另类专区亚洲| 亚洲国产精品无码久久青草| 久久亚洲国产成人精品无码区| 亚洲啪啪AV无码片| 亚洲Av无码专区国产乱码DVD| 亚洲一区二区三区日本久久九| 亚洲精品高清国产麻豆专区| 亚洲一区二区三区免费观看 | 亚洲国产精品久久丫| 亚洲国产精品成人综合久久久| 亚洲中文字幕AV每天更新| 色窝窝亚洲av网| 国产亚洲视频在线播放| 亚洲成A人片在线观看WWW| 亚洲黄色网站视频| 亚洲成a人片在线观看精品| 亚洲精品无码久久久久秋霞|