> 백엔드 개발 > 파이썬 튜토리얼 > httpx를 사용하여 FastAPI/Uvicorn에서 다운스트림 HTTP 요청을 효율적으로 처리하는 방법은 무엇입니까?

httpx를 사용하여 FastAPI/Uvicorn에서 다운스트림 HTTP 요청을 효율적으로 처리하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-12 18:57:11
원래의
644명이 탐색했습니다.

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

httpx를 사용하여 FastAPI/Uvicorn에서 다운스트림 HTTP 요청 만들기

소개

외부 HTTP 요청에 의존하는 FastAPI/Uvicorn의 API 엔드포인트는 매우 중요합니다. 스레드로부터 안전한 동시성 처리를 보장합니다. 이 문서에서는 httpx 라이브러리를 사용하여 이 문제를 해결하기 위해 권장되는 접근 방식을 살펴봅니다.

httpx 사용

местоrequests에서 httpx는 공유 클라이언트. 이렇게 하면 연결과 헤더를 재사용하여 성능이 향상됩니다.

FastAPI에서 httpx 구현

FastAPI에서 httpx를 사용하려면 해당 AsyncClient를 활용할 수 있습니다.

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 상태의 일부로 공유 클라이언트가 생성되어 다음 사용자가 액세스할 수 있습니다. 엔드포인트.

비동기 예

다음 엔드포인트는 비동기 HTTP 요청을 생성하고 응답을 다시 클라이언트로 스트리밍합니다.

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))
로그인 후 복사

업데이트된 예

시작 및 종료 이벤트 지원 중단으로 인해 이제 수명 처리기를 사용할 수 있습니다.

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 요청을 효율적으로 처리하여 스레드 안전성과 성능을 보장할 수 있습니다. 멀티스레드 환경에서의 최적화.

위 내용은 httpx를 사용하여 FastAPI/Uvicorn에서 다운스트림 HTTP 요청을 효율적으로 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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