httpx 는 sync 용 httpx.Client 와 async 용 httpx.AsyncClient 를 제공해. 둘 다 context manager 로 닫을 수 있고 TCP connection pool 을 유지해. 요청마다 새로 만들면 pool 을 재사용하지 못해 처리량이 떨어져.
process 마다 client 하나를 재사용해
OpenAI SDK와 같은 원칙이야. app 이 시작할 때 하나를 만들고 끝날 때까지 함께 써. httpx.get() 같은 단발 호출은 매번 새 connection 과 TLS handshake 를 만들고 keep-alive 이점을 잃어.
LLM streaming 에 맞게 timeout 을 나눠
httpx 기본 5초 timeout 은 긴 응답을 중간에 끊을 수 있어. connect=10, read=300, write=10, pool=10 처럼 단계별로 설정해. timeout=None 은 멈춘 응답이 connection 을 끝없이 잡게 할 수 있어.
여러 호출에는 AsyncClient
동시에 여러 요청을 보낼 가능성이 있다면 AsyncClient와 asyncio.gather가 잘 맞아. sync Client는 단일 thread에서 순서대로 처리하는 batch 도구에 사용할 수 있어.