Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah httpx Boleh Menyelesaikan `h11._util.LocalProtocolError` Apabila Membuat Permintaan HTTP Hilir Serentak dalam FastAPI?

Bagaimanakah httpx Boleh Menyelesaikan `h11._util.LocalProtocolError` Apabila Membuat Permintaan HTTP Hilir Serentak dalam FastAPI?

Barbara Streisand
Lepaskan: 2024-12-28 07:07:24
asal
107 orang telah melayarinya

How Can httpx Solve `h11._util.LocalProtocolError` When Making Concurrent Downstream HTTP Requests in FastAPI?

Membuat Permintaan HTTP Hilir dengan Uvicorn/FastAPI

Isu:

Apabila menghantar berbilang serentak permintaan ke titik akhir API yang dihoskan pada Uvicorn/FastAPI, ralat adalah dihadapi:

h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
Salin selepas log masuk

Penyelesaian:

Untuk menyelesaikan isu ini dan mengendalikan permintaan HTTP hiliran dengan cekap dalam FastAPI, pertimbangkan untuk menggunakan httpx dan bukannya perpustakaan permintaan tradisional.

Mengapa menggunakan httpx?

  • Async Async: httpx menawarkan API tak segerak, membenarkan pengendalian tak segerak bagi permintaan HTTP.
  • Sambungan Pengumpulan: Contoh httpx.AsyncClient() menggunakan semula sambungan TCP untuk berbilang permintaan kepada yang sama hos, mengoptimumkan prestasi.
  • Sokongan Strim: httpx menyediakan pengendalian respons penstriman terbina dalam untuk kedua-dua permintaan masuk dan keluar.

Contoh Penggunaan:

Kod berikut menunjukkan penggunaan httpx dalam FastAPI titik akhir:

from fastapi import FastAPI, StreamingResponse
from httpx import AsyncClient

app = FastAPI()

@app.on_event("startup")
async def startup_event():
    app.state.client = AsyncClient()

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

@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())
Salin selepas log masuk

Petua Tambahan:

  • Gunakan pengendali jangka hayat untuk memulakan dan menutup klien httpx.
  • Pertimbangkan untuk menggunakan penstriman respons untuk mengelakkan penggunaan memori pada bahagian pelayan.
  • Kawal saiz kolam sambungan dengan hujah kata kunci had pada Klien httpx.

Dengan mengguna pakai httpx dan melaksanakan amalan terbaik yang dicadangkan, anda boleh mengendalikan permintaan HTTP hiliran dengan berkesan dalam aplikasi Uvicorn/FastAPI anda.

Atas ialah kandungan terperinci Bagaimanakah httpx Boleh Menyelesaikan `h11._util.LocalProtocolError` Apabila Membuat Permintaan HTTP Hilir Serentak dalam FastAPI?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan