""" 全局 httpx 客户端 - 连接池复用 """ import httpx from typing import Optional DEFAULT_TIMEOUT = 60.0 MAX_CONNECTIONS = 10 MAX_KEEPALIVE_CONNECTIONS = 5 KEEPALIVE_EXPIRY = 30.0 _http_client: Optional[httpx.AsyncClient] = None def get_http_client() -> httpx.AsyncClient: """获取全局 httpx 客户端单例""" global _http_client if _http_client is None: limits = httpx.Limits( max_connections=MAX_CONNECTIONS, max_keepalive_connections=MAX_KEEPALIVE_CONNECTIONS, keepalive_expiry=KEEPALIVE_EXPIRY, ) _http_client = httpx.AsyncClient( timeout=DEFAULT_TIMEOUT, limits=limits, follow_redirects=True, ) return _http_client async def close_http_client(): """关闭全局客户端(应用关闭时调用)""" global _http_client if _http_client is not None: await _http_client.aclose() _http_client = None