""" Shared aiohttp ClientSession singleton. Reuses a single TCP connection pool across all HTTP clients, avoiding repeated TCP/TLS handshake overhead per request. """ import logging from typing import Optional import aiohttp logger = logging.getLogger(__name__) _session: Optional[aiohttp.ClientSession] = None async def get_http_session() -> aiohttp.ClientSession: """Get or create the shared aiohttp ClientSession.""" global _session if _session is None or _session.closed: _session = aiohttp.ClientSession( timeout=aiohttp.ClientTimeout(total=30), ) return _session async def close_http_session() -> None: """Close the shared session. Call on app shutdown.""" global _session if _session and not _session.closed: await _session.close() _session = None