>  기사  >  백엔드 개발  >  HTTPX는 FastAPI 엔드포인트의 ThreadPoolExecutor에 대한 더 안전한 대안입니까?

HTTPX는 FastAPI 엔드포인트의 ThreadPoolExecutor에 대한 더 안전한 대안입니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-15 10:43:03261검색

Is HTTPX a Safer Alternative to ThreadPoolExecutor in FastAPI Endpoints?

FastAPI 엔드포인트에서 동시 ThreadPoolExecutor 사용에 대한 우려

문제:

Concurrent.futures. ThreadPoolExecutor는 병렬 처리에 사용되지만 FastAPI 엔드포인트에 대한 잠재적 영향에 대한 우려. 특히 여러 API 호출로 인해 너무 많은 스레드 생성이 트리거되면 리소스가 고갈되고 충돌이 발생할 수 있습니다.

해결책:

ThreadPoolExecutor에 의존하는 대신 HTTPX 라이브러리는 비동기 API를 통해 보다 안전한 대안을 제시합니다. HTTPX를 사용하면 클라이언트를 생성하고 이를 여러 요청에 재사용할 수 있습니다. 비동기 작업을 수행하려면 AsyncClient를 사용하는 것이 좋습니다.

HTTPX 구성:

HTTPX를 사용하면 연결 풀 크기와 시간 초과 설정을 사용자 정의할 수 있습니다. 예:

limits = httpx.Limits(max_keepalive_connections=5, max_connections=10)
async with httpx.AsyncClient(limits=limits) as client:
    ...

특정 요구 사항에 맞게 제한 및 시간 초과 값을 조정합니다.

비동기 요청 실행:

여러 비동기 요청을 수행하려면 요청이 있는 경우 asyncio.gather()를 활용할 수 있습니다. 각 요청이 완료되기를 기다리고 제공된 작업과 동일한 순서로 결과 목록을 반환합니다.

수명 주기 관리:

FastAPI 애플리케이션의 경우 수명 종속성 사용을 고려하세요. 이를 통해 애플리케이션이 시작되고 종료될 때 HTTPX 클라이언트와 같은 리소스를 초기화하고 정리할 수 있습니다.

스트리밍 응답:

피해야 하는 경우 전체 응답을 메모리에 로드하려면 HPX의 스트리밍 기능과 FastAPI의 StreamingResponse를 사용해 보세요. 이를 통해 응답 데이터 덩어리를 반복적으로 처리하여 더 나은 확장성을 제공할 수 있습니다.

코드 예:

from fastapi import FastAPI, Request
from contextlib import asynccontextmanager
import httpx
import asyncio

URLS = ['https://www.foxnews.com/',
        'https://edition.cnn.com/',
        'https://www.nbcnews.com/',
        'https://www.bbc.co.uk/',
        'https://www.reuters.com/']

@asynccontextmanager
async def lifespan(app: FastAPI):
    # Custom settings
    client = httpx.AsyncClient(...)
    yield {'client': client}
    await client.aclose()  # Close the client on shutdown

app = FastAPI(lifespan=lifespan)

async def send(url, client):
    return await client.get(url)

@app.get('/')
async def main(request: Request):
    client = request.state.client
    tasks = [send(url, client) for url in URLS]
    responses = await asyncio.gather(*tasks)
    # Process the responses as needed (e.g., extract data, modify content)

위 내용은 HTTPX는 FastAPI 엔드포인트의 ThreadPoolExecutor에 대한 더 안전한 대안입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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