Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengelak Ralat 'Sambungan Tertutup' Semasa Membuat Permintaan HTTP Serentak dalam FastAPI Menggunakan Uvicorn?

Bagaimanakah Saya Boleh Mengelak Ralat 'Sambungan Tertutup' Semasa Membuat Permintaan HTTP Serentak dalam FastAPI Menggunakan Uvicorn?

DDD
DDDasal
2024-12-12 21:59:15504semak imbas

How Can I Avoid

Membuat Permintaan HTTP dalam Uvicorn/FastAPI

Apabila mengendalikan titik akhir HTTP yang dibina menggunakan FastAPI dan Uvicorn, adalah perkara biasa untuk meminta data daripada API luaran. Walau bagaimanapun, apabila berurusan dengan berbilang permintaan serentak, ralat seperti "tidak boleh mengendalikan jenis acara ConnectionClosed apabila role=SERVER dan state=SEND_RESPONSE" mungkin timbul. Ini berlaku kerana pustaka klien HTTP lalai, 'permintaan', tidak selamat untuk rangkaian sepenuhnya apabila digunakan dalam persekitaran serentak sedemikian.

Untuk menyelesaikan isu ini, pertimbangkan untuk melaksanakan perpustakaan klien HTTP alternatif yang dipanggil httpx. Ia menawarkan API async yang membantu mengelakkan isu keselamatan benang dalam FastAPI. Contoh di bawah menunjukkan cara menggunakan httpx dalam FastAPI:

from fastapi import FastAPI, Request, BackgroundTask
from fastapi.responses import StreamingResponse, Response
from contextlib import asynccontextmanager
import httpx

@asynccontextmanager
async def lifespan(app: FastAPI):
    async with httpx.AsyncClient() as client:
        yield {'client': client}

app = FastAPI(lifespan=lifespan)

@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())) 

Dengan menggunakan API async httpx, anda boleh mengendalikan permintaan HTTP dalam FastAPI dengan lebih cekap sambil mengekalkan keselamatan rangkaian. Anda boleh menyesuaikan lagi saiz kolam sambungan menggunakan hujah kata kunci 'had' pada objek Pelanggan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelak Ralat 'Sambungan Tertutup' Semasa Membuat Permintaan HTTP Serentak dalam FastAPI Menggunakan Uvicorn?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn