> 백엔드 개발 > 파이썬 튜토리얼 > FastAPI에서 동시 다운스트림 HTTP 요청을 할 때 httpx가 `h11._util.LocalProtocolError`를 어떻게 해결할 수 있습니까?

FastAPI에서 동시 다운스트림 HTTP 요청을 할 때 httpx가 `h11._util.LocalProtocolError`를 어떻게 해결할 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-28 07:07:24
원래의
107명이 탐색했습니다.

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

Uvicorn/FastAPI를 사용하여 다운스트림 HTTP 요청

문제:

여러 동시 전송 시 Uvicorn/FastAPI에서 호스팅되는 API 엔드포인트에 요청하면 오류가 발생합니다. 발생:

h11._util.LocalProtocolError: can't handle event type ConnectionClosed when role=SERVER and state=SEND_RESPONSE
로그인 후 복사

해결책:

이 문제를 해결하고 FastAPI 내에서 다운스트림 HTTP 요청을 효율적으로 처리하려면 전통적인 요청 라이브러리입니다.

이용하는 이유 httpx?

    비동기 API:
  • httpx는 HTTP(s) 요청을 비동기적으로 처리할 수 있는 비동기 API를 제공합니다.
  • 연결 풀링:
  • httpx.AsyncClient() 인스턴스는 동일한 호스트에 대한 여러 요청에 대해 TCP 연결을 재사용하여 최적화합니다. 성능.
  • 스트림 지원:
  • httpx는 들어오고 나가는 요청 모두에 대해 내장된 스트리밍 응답 처리 기능을 제공합니다.
사용 예:

다음 코드는 FastAPI 내에서 httpx를 사용하는 방법을 보여줍니다. 엔드포인트:

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())
로그인 후 복사
추가 팁:

수명 핸들러를 사용하여 httpx 클라이언트를 초기화하고 닫습니다.
  • 스트리밍 사용을 고려하세요. 서버 측에서 메모리 소비를 피하기 위해 응답합니다.
  • limits 키워드 인수를 사용하여 연결 풀 크기를 제어합니다.
  • httpx를 채택하고 제안된 모범 사례를 구현하면 Uvicorn/FastAPI 애플리케이션 내에서 다운스트림 HTTP 요청을 효과적으로 처리할 수 있습니다.

위 내용은 FastAPI에서 동시 다운스트림 HTTP 요청을 할 때 httpx가 `h11._util.LocalProtocolError`를 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿