更新ios

This commit is contained in:
2026-01-20 18:53:03 +08:00
parent b73fb257d6
commit 0b2185777e

86
app.py
View File

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