INNER CODE UNIT · Python
_force_close_old_client
CassiopeiaCode/q2api · app.py:244
async def _force_close_old_client(client_to_close):
try:
await asyncio.sleep(120) # 等待2分钟
logger.info("[连接回收] 开始强制关闭旧客户端...")
# 强制关闭,不等待正在进行的请求
try:
# 尝试优雅关闭,但设置短超时
await asyncio.wait_for(client_to_close.aclose(), timeout=2.0)
logger.info("[连接回收] 旧客户端已成功关闭")
except asyncio.TimeoutError:
logger.warning("[连接回收] 旧客户端关闭超时,尝试强制终止...")
# 超时后尝试访问底层连接池强制关闭
try:
# httpx 内部结构:client -> _transport -> _pool
if hasattr(client_to_close, '_transport') and client_to_close._transport:
transport = client_to_close._transport
# 尝试关闭底层连接池