中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python異步的ASGI與Fast Api如何實現

發布時間:2022-03-29 17:00:25 來源:億速云 閱讀:245 作者:iii 欄目:移動開發

這篇文章主要講解了“python異步的ASGI與Fast Api如何實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python異步的ASGI與Fast Api如何實現”吧!

Asgi是異步通信服務規范。客戶端發起服務呼叫,但不等待結果。調用方立即繼續其工作,并不關心結果。如果調用方對結果感興趣,有一些機制可以讓其隨時被回調方法返回結果。

ASGI嘗試保持在一個簡單的應用接口的前提下,提供允許數據能夠在任意的時候、被任意應用進程發送和接受的抽象。并且同樣描述了一個新的,兼容HTTP請求響應以及WebSocket數據幀的序列格式。允許這些協議能通過網絡或本地socket進行傳輸,以及讓不同的協議被分配到不同的進程中。

#Asgi example  
 async def application(scope, receive, send):  
  event = await receive()  
      ...   
    await send({"type": "websocket.send", ...})

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 的所有功能均可用:路由,中間件,會話,模板,藍圖等

ASGI服務器

Uvicorn 是一個快速的 ASGI 服務器,Uvicorn 是基于 uvloop 和 httptools 構建的,是 Python 異步生態中重要的一員。
Uvicorn 當前支持 HTTP / 1.1 和 WebSockets,將來計劃支持HTTP / 2。
版本要求 Python 3.5 以上,Uvicorn 的安裝,

pip install uvicorn

示例如下:

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

FastAPI

FastAPI 是一個基于 Starlette 和 Pydantic 的 API 框架,其靈感來自以前的 APISta 服務器版本
使用 Python 3.6+ 類型聲明編寫 API 函數參數,并獲得自動數據轉換,數據驗證。
FastApi 最主要的特點是快,非常高的性能,向 NodeJS 和 Go 看齊,現有最快的Python框架之一
同時它可以自動生成交互式 API 文檔 UI,編寫 API 接口后,你就可以使用符合標準的 UI 如 SwaggerUI,ReDoc 等來使用 API。

其特點如下:

  • 快速:擁有非常高的性能,歸功于 Starlette 和 Pydantic;Starlette 用于路由匹配,Pydantic 用于數據驗證

  • 開發效率:功能開發效率提升 200% 到 300%

  • 減少 bug:減少 40% 的因為開發者粗心導致的錯誤

  • 智能:內部的類型注解非常完善,編輯器可處處自動補全

  • 簡單:框架易于使用,文檔易于閱讀

  • 簡短:使代碼重復最小化,通過不同的參數聲明實現豐富的功能

  • 健壯:可以編寫出線上使用的代碼,并且會自動生成交互式文檔

  • 標準化:兼容 API 相關開放標準

  • 它使用了 Python 的類型注解

示例如下:

先安裝依賴的庫

pip install fastapi
pip install uvicorn
import uvicorn
from fastapi import FastAPI

# 類似于 app = Flask(__name__)
app = FastAPI()

# 綁定路由和視圖函數
@app.get("/")
async def root():
    return {"message": "Hi juejin"}

# 在 Windows 中必須加上 if __name__ == "__main__",否則會拋出 RuntimeError: This event loop is already running
if __name__ == "__main__":
    # 啟動服務,因為我們這個文件叫做 main.py,所以需要啟動 main.py 里面的 app
    # 第一個參數 "main:app" 就表示這個含義,然后是 host 和 port 表示監聽的 ip 和端口
    uvicorn.run(app="main:app", host="127.0.0.1", port=8000, reload=True, debug=True)

FastAPI 的幾大功能:類型檢查、自動 swagger UI、支持 asyncio、強大的依賴注入系統

感謝各位的閱讀,以上就是“python異步的ASGI與Fast Api如何實現”的內容了,經過本文的學習后,相信大家對python異步的ASGI與Fast Api如何實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

深州市| 汉川市| 遂昌县| 丰都县| 固阳县| 平武县| 长岭县| 淳安县| 麻江县| 怀安县| 咸宁市| 旬阳县| 深州市| 安远县| 澄江县| 金门县| 衡山县| 桂平市| 红桥区| 西乌珠穆沁旗| 石屏县| 子长县| 昂仁县| 武邑县| 海淀区| 南开区| 西安市| 通海县| 邓州市| 神池县| 峨眉山市| 平江县| 盱眙县| 保德县| 西林县| 嘉荫县| 合作市| 吴江市| 拜城县| 潜山县| 临泽县|