更新ios
This commit is contained in:
80
app.py
80
app.py
@@ -8566,13 +8566,11 @@ def get_stock_quotes():
|
||||
return jsonify({'success': False, 'error': str(e)}), 500
|
||||
|
||||
|
||||
# ==================== ClickHouse 连接池(带健康检查) ====================
|
||||
_clickhouse_client = None
|
||||
_clickhouse_client_lock = threading.Lock()
|
||||
# ==================== ClickHouse 连接管理(每次请求新建连接,更稳定) ====================
|
||||
|
||||
def _create_clickhouse_client():
|
||||
"""创建新的 ClickHouse 客户端连接,并验证连接有效"""
|
||||
client = Cclient(
|
||||
"""创建新的 ClickHouse 客户端连接"""
|
||||
return Cclient(
|
||||
host='127.0.0.1',
|
||||
port=9000,
|
||||
user='default',
|
||||
@@ -8583,52 +8581,52 @@ def _create_clickhouse_client():
|
||||
'send_receive_timeout': 300,
|
||||
}
|
||||
)
|
||||
# 立即验证连接,确保 socket 已建立
|
||||
try:
|
||||
client.execute("SELECT 1")
|
||||
except Exception as e:
|
||||
print(f"[ClickHouse] 创建连接后验证失败: {e}")
|
||||
raise
|
||||
return client
|
||||
|
||||
def get_clickhouse_client():
|
||||
"""获取 ClickHouse 客户端(带健康检查和自动重连)"""
|
||||
global _clickhouse_client
|
||||
"""
|
||||
获取 ClickHouse 客户端(每次创建新连接)
|
||||
|
||||
with _clickhouse_client_lock:
|
||||
# 如果客户端不存在,创建新连接
|
||||
if _clickhouse_client is None:
|
||||
try:
|
||||
_clickhouse_client = _create_clickhouse_client()
|
||||
print("[ClickHouse] 创建新连接成功")
|
||||
return _clickhouse_client
|
||||
except Exception as e:
|
||||
print(f"[ClickHouse] 创建连接失败: {e}")
|
||||
_clickhouse_client = None
|
||||
raise
|
||||
注意:调用方应在使用完毕后调用 client.disconnect() 释放连接,
|
||||
或使用 execute_clickhouse_query() 辅助函数自动管理连接
|
||||
"""
|
||||
return _create_clickhouse_client()
|
||||
|
||||
# 健康检查:尝试执行简单查询
|
||||
def execute_clickhouse_query(query, params=None, max_retries=2):
|
||||
"""
|
||||
执行 ClickHouse 查询(带自动重试和连接管理)
|
||||
|
||||
Args:
|
||||
query: SQL 查询语句
|
||||
params: 查询参数字典
|
||||
max_retries: 最大重试次数
|
||||
|
||||
Returns:
|
||||
查询结果列表
|
||||
"""
|
||||
last_error = None
|
||||
|
||||
for attempt in range(max_retries + 1):
|
||||
client = None
|
||||
try:
|
||||
_clickhouse_client.execute("SELECT 1")
|
||||
return _clickhouse_client
|
||||
client = _create_clickhouse_client()
|
||||
result = client.execute(query, params) if params else client.execute(query)
|
||||
return result
|
||||
except Exception as e:
|
||||
print(f"[ClickHouse] 连接失效,正在重连: {e}")
|
||||
# 安全断开旧连接
|
||||
last_error = e
|
||||
if attempt < max_retries:
|
||||
print(f"[ClickHouse] 查询失败 (尝试 {attempt + 1}/{max_retries + 1}): {e}")
|
||||
import time
|
||||
time.sleep(0.5) # 短暂等待后重试
|
||||
else:
|
||||
print(f"[ClickHouse] 查询最终失败: {e}")
|
||||
finally:
|
||||
if client:
|
||||
try:
|
||||
_clickhouse_client.disconnect()
|
||||
client.disconnect()
|
||||
except Exception:
|
||||
pass
|
||||
_clickhouse_client = None
|
||||
|
||||
# 重新创建连接
|
||||
try:
|
||||
_clickhouse_client = _create_clickhouse_client()
|
||||
print("[ClickHouse] 重连成功")
|
||||
return _clickhouse_client
|
||||
except Exception as reconnect_error:
|
||||
print(f"[ClickHouse] 重连失败: {reconnect_error}")
|
||||
_clickhouse_client = None
|
||||
raise
|
||||
raise last_error
|
||||
|
||||
|
||||
# ==================== 高频五档数据 ClickHouse HTTP 客户端(222.128.1.157:18123) ====================
|
||||
|
||||
Reference in New Issue
Block a user