python異步的ASGI與FastApi如何實(shí)現(xiàn)

這篇文章主要講解了“python異步的ASGI與Fast Api如何實(shí)現(xiàn)”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“python異步的ASGI與Fast Api如何實(shí)現(xiàn)”吧!

創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都網(wǎng)站建設(shè)、羅源網(wǎng)絡(luò)推廣、微信平臺(tái)小程序開發(fā)、羅源網(wǎng)絡(luò)營銷、羅源企業(yè)策劃、羅源品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供羅源建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:muchs.cn

Asgi是異步通信服務(wù)規(guī)范。客戶端發(fā)起服務(wù)呼叫,但不等待結(jié)果。調(diào)用方立即繼續(xù)其工作,并不關(guān)心結(jié)果。如果調(diào)用方對(duì)結(jié)果感興趣,有一些機(jī)制可以讓其隨時(shí)被回調(diào)方法返回結(jié)果。

ASGI嘗試保持在一個(gè)簡單的應(yīng)用接口的前提下,提供允許數(shù)據(jù)能夠在任意的時(shí)候、被任意應(yīng)用進(jìn)程發(fā)送和接受的抽象。并且同樣描述了一個(gè)新的,兼容HTTP請(qǐng)求響應(yīng)以及WebSocket數(shù)據(jù)幀的序列格式。允許這些協(xié)議能通過網(wǎng)絡(luò)或本地socket進(jìn)行傳輸,以及讓不同的協(xié)議被分配到不同的進(jìn)程中。

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

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 的風(fēng)格,只是向其中添加異步、WebSocket 和 HTTP 2支持。
因此,你可以從 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)圖等

ASGI服務(wù)器

Uvicorn 是一個(gè)快速的 ASGI 服務(wù)器,Uvicorn 是基于 uvloop 和 httptools 構(gòu)建的,是 Python 異步生態(tài)中重要的一員。
Uvicorn 當(dāng)前支持 HTTP / 1.1 和 WebSockets,將來計(jì)劃支持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!",
    })

運(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

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。

其特點(diǎn)如下:

  • 快速:擁有非常高的性能,歸功于 Starlette 和 Pydantic;Starlette 用于路由匹配,Pydantic 用于數(shù)據(jù)驗(yàn)證

  • 開發(fā)效率:功能開發(fā)效率提升 200% 到 300%

  • 減少 bug:減少 40% 的因?yàn)殚_發(fā)者粗心導(dǎo)致的錯(cuò)誤

  • 智能:內(nèi)部的類型注解非常完善,編輯器可處處自動(dòng)補(bǔ)全

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

  • 簡短:使代碼重復(fù)最小化,通過不同的參數(shù)聲明實(shí)現(xiàn)豐富的功能

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

  • 標(biāo)準(zhǔn)化:兼容 API 相關(guān)開放標(biāo)準(zhǔn)

  • 它使用了 Python 的類型注解

示例如下:

先安裝依賴的庫

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

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

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

# 在 Windows 中必須加上 if __name__ == "__main__",否則會(huì)拋出 RuntimeError: This event loop is already running
if __name__ == "__main__":
    # 啟動(dòng)服務(wù),因?yàn)槲覀冞@個(gè)文件叫做 main.py,所以需要啟動(dòng) main.py 里面的 app
    # 第一個(gè)參數(shù) "main:app" 就表示這個(gè)含義,然后是 host 和 port 表示監(jiān)聽的 ip 和端口
    uvicorn.run(app="main:app", host="127.0.0.1", port=8000, reload=True, debug=True)

FastAPI 的幾大功能:類型檢查、自動(dòng) swagger UI、支持 asyncio、強(qiáng)大的依賴注入系統(tǒng)

感謝各位的閱讀,以上就是“python異步的ASGI與Fast Api如何實(shí)現(xiàn)”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)python異步的ASGI與Fast Api如何實(shí)現(xiàn)這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

文章標(biāo)題:python異步的ASGI與FastApi如何實(shí)現(xiàn)
轉(zhuǎn)載來源:http://muchs.cn/article10/ispsdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、微信小程序、網(wǎng)站維護(hù)、ChatGPT全網(wǎng)營銷推廣、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營