Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Mengelak Ralat 'Sambungan Tertutup' Semasa Membuat Permintaan HTTP Serentak dalam FastAPI Menggunakan Uvicorn?
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!