首頁 > 後端開發 > Python教學 > 如何在 FastAPI/Uvicorn 中使用 httpx 有效處理下游 HTTP 請求?

如何在 FastAPI/Uvicorn 中使用 httpx 有效處理下游 HTTP 請求?

Linda Hamilton
發布: 2024-12-12 18:57:11
原創
645 人瀏覽過

How to Efficiently Handle Downstream HTTP Requests in FastAPI/Uvicorn Using httpx?

使用httpx 在FastAPI/Uvicorn 中發出下游HTTP 請求

簡介

簡介

使用API /Uvicorn 中的API 端點依賴外部HTTP請求,這一點至關重要確保並發的線程安全處理。本文探討了使用 httpx 函式庫解決此問題的建議方法。

使用 httpx

在место請求中,httpx 提供了一個非同步 API,它支援使用共享客戶端。這透過重複使用連接和標頭來提高效能。

在FastAPI 實現httpx

from fastapi import FastAPI
from httpx import AsyncClient

app = FastAPI()
app.state.client = AsyncClient()

@app.on_event("shutdown")
async def shutdown_event():
    await app.state.client.aclose()
登入後複製

要在FastAPI 中使用httpx,您可以利用其AsyncClient:

創建了一個共享客戶端作為FastAPI狀態的一部分,允許透過

非同步範例
from fastapi import FastAPI, StreamingResponse, BackgroundTask

@app.get("/")
async def home():
    client = app.state.client
    req = client.build_request("GET", "https://www.example.com/")
    r = await client.send(req, stream=True)
    return StreamingResponse(r.aiter_raw(), background=BackgroundTask(r.aclose))
登入後複製

以下端點發出非同步HTTP 請求並將回應串流傳輸回客戶端:

更新的範例
from fastapi import FastAPI, Request, lifespan
from starlette.background import BackgroundTask
from httpx import AsyncClient, Request

@lifespan.on_event("startup")
async def startup_handler(app: FastAPI):
    app.state.client = AsyncClient()

@lifespan.on_event("shutdown")
async def shutdown_handler():
    await app.state.client.aclose()

@app.get("/")
async def home(request: Request):
    client = request.state.client
    req = client.build_request("GET", "https://www.example.com")
    r = await client.send(req, stream=True)
    return StreamingResponse(r.aiter_raw(), background=BackgroundTask(r.aclose))
登入後複製

隨著啟動和關閉事件的棄用,您可以現在使用生命週期處理程序:

讀取回應內容
def gen():
    async for chunk in r.aiter_raw():
        yield chunk
    await r.aclose()

return StreamingResponse(gen())
登入後複製

如果您需要在將回應內容傳送到客戶端之前在伺服器端讀取回應內容,您可以使用一個產生器:

結論透過利用httpx 及其共用非同步客戶端,您可以在 FastAPI/Uvicorn 中有效處理下游 HTTP 請求,確保執行緒安全性和效能多執行緒環境下的最佳化。

以上是如何在 FastAPI/Uvicorn 中使用 httpx 有效處理下游 HTTP 請求?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板