mirror of
https://github.com/fawney19/Aether.git
synced 2026-01-12 12:38:31 +08:00
perf: 优化 HTTP 客户端连接池复用
- 新增 get_proxy_client() 方法,相同代理配置复用同一客户端 - 添加 LRU 淘汰策略,代理客户端上限 50 个防止内存泄漏 - 新增 get_default_client_async() 异步线程安全版本 - 使用模块级锁避免类属性初始化竞态条件 - 优化 ConcurrencyManager 使用 Redis MGET 批量获取减少往返 - 添加 get_pool_stats() 连接池统计信息接口
This commit is contained in:
@@ -85,6 +85,8 @@ class ConcurrencyManager:
|
||||
"""
|
||||
获取当前并发数
|
||||
|
||||
性能优化:使用 MGET 批量获取,减少 Redis 往返次数
|
||||
|
||||
Args:
|
||||
endpoint_id: Endpoint ID(可选)
|
||||
key_id: ProviderAPIKey ID(可选)
|
||||
@@ -104,15 +106,21 @@ class ConcurrencyManager:
|
||||
key_count = 0
|
||||
|
||||
try:
|
||||
# 使用 MGET 批量获取,减少 Redis 往返(2 次 GET -> 1 次 MGET)
|
||||
keys_to_fetch = []
|
||||
if endpoint_id:
|
||||
endpoint_key = self._get_endpoint_key(endpoint_id)
|
||||
result = await self._redis.get(endpoint_key)
|
||||
endpoint_count = int(result) if result else 0
|
||||
|
||||
keys_to_fetch.append(self._get_endpoint_key(endpoint_id))
|
||||
if key_id:
|
||||
key_key = self._get_key_key(key_id)
|
||||
result = await self._redis.get(key_key)
|
||||
key_count = int(result) if result else 0
|
||||
keys_to_fetch.append(self._get_key_key(key_id))
|
||||
|
||||
if keys_to_fetch:
|
||||
results = await self._redis.mget(keys_to_fetch)
|
||||
idx = 0
|
||||
if endpoint_id:
|
||||
endpoint_count = int(results[idx]) if results[idx] else 0
|
||||
idx += 1
|
||||
if key_id:
|
||||
key_count = int(results[idx]) if results[idx] else 0
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"获取并发数失败: {e}")
|
||||
|
||||
Reference in New Issue
Block a user