>백엔드 개발 >파이썬 튜토리얼 >httpx는 어떻게 FastAPI에서 안전하고 효율적인 다운스트림 HTTP 요청을 향상시킬 수 있습니까?

httpx는 어떻게 FastAPI에서 안전하고 효율적인 다운스트림 HTTP 요청을 향상시킬 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-07 17:27:15987검색

How Can httpx Enhance Safe and Efficient Downstream HTTP Requests in FastAPI?

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

표준 Python 요청 라이브러리를 사용하여 FastAPI에서 HTTP 요청을 만들 때 동시 요청 중에 스레드 안전이 문제가 됩니다. 이 문제를 효과적으로 해결하려면 스레드 안전성과 향상된 성능을 모두 제공하는 라이브러리인 httpx를 사용하는 것이 좋습니다.

httpx 비동기 API 사용

httpx는 비동기 API와 함께 제공되므로 쉽게 다음 작업을 수행할 수 있습니다. 여러 동시 작업을 효율적으로 처리하면서 HTTP 요청을 수행합니다. 다음은 FastAPI 엔드포인트 내에서의 사용 예입니다.

from httpx import AsyncClient
from fastapi import FastAPI, Request

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

이 예에서

  • startup_event()는 공유 httpx AsyncClient를 앱 상태에서 초기화하고 저장합니다.
  • shutdown_event()는 애플리케이션 적용 시 클라이언트를 정상적으로 종료합니다. shutdown.
  • home()은 공유 클라이언트를 사용하여 https://www.example.com에 대한 HTTP 요청을 수행하고 스트리밍을 활용하여 대규모 응답을 효율적으로 처리합니다.

사용 httpx 동기 API

async def로 엔드포인트를 정의하는 것을 원하지 않는 경우 httpx의 동기 API를 선택해야 합니다. 이 접근 방식은 스레드 안전성을 유지하고 엔드포인트 구현을 단순화합니다.

from httpx import Client
from fastapi import FastAPI, Request

app = FastAPI()

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

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

@app.get('/')
def home(request: Request):
    client = request.state.client
    req = client.build_request('GET', 'https://www.example.com')
    try:
        r = client.send(req)
        content_type = r.headers.get('content-type')
    except Exception as e:
        content_type = 'text/plain'
        e = str(e)

    if content_type == 'application/json':
        return r.json()
    elif content_type == 'text/plain':
        return PlainTextResponse(content=r.text)
    else:
        return Response(content=r.content)

이 예에서 동기 API는 try/exc 블록 내에서 HTTP 요청을 처리하여 요청 중에 발생할 수 있는 모든 예외를 적절하게 처리할 수 있습니다.

추가 기능 및 고려 사항

  • Async API 이점: 비동기 API는 뛰어난 성능을 제공하고 동시 요청을 통해 더 효율적으로 확장됩니다.
  • 스트리밍 응답: 요청 또는 응답에서 대량의 데이터를 처리할 때 스트리밍 응답을 사용합니다.
  • 연결 풀 제어: httpx를 생성할 때 제한 인수를 설정하여 연결 풀 사용을 최적화할 수 있습니다.
  • 스레드 안전성: httpx는 스레드로부터 안전하도록 설계되어 여러 스레드에서 안정적인 실행을 보장합니다.

httpx와 해당 기능을 활용하면 FastAPI 내에서 자신있게 다운스트림 HTTP 요청을 수행하여 여러 동시 작업을 원활하게 처리하고 애플리케이션 안정성을 보장할 수 있습니다.

위 내용은 httpx는 어떻게 FastAPI에서 안전하고 효율적인 다운스트림 HTTP 요청을 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.