更新ios

This commit is contained in:
2026-01-18 18:10:32 +08:00
parent 1d24650fe4
commit efce85f4f9

95
app.py
View File

@@ -8432,46 +8432,69 @@ def get_clickhouse_client():
return _clickhouse_client
# ==================== 高频五档数据 ClickHouse 连接池222.128.1.157 ====================
_realtime_clickhouse_client = None
_realtime_clickhouse_client_lock = threading.Lock()
# ==================== 高频五档数据 ClickHouse HTTP 客户端222.128.1.157:18123 ====================
class RealtimeClickHouseHTTP:
"""
使用 HTTP 协议连接 ClickHouse端口 18123
因为 222.128.1.157 只开放了 HTTP 端口,未开放原生协议端口 9000
"""
def __init__(self, host='222.128.1.157', port=18123, user='default', password='Zzl33818!', database='stock'):
self.base_url = f'http://{host}:{port}'
self.user = user
self.password = password
self.database = database
def _create_realtime_clickhouse_client():
"""创建高频五档数据 ClickHouse 客户端连接222.128.1.157"""
return Cclient(
host='222.128.1.157',
port=9000, # 原生协议端口(非 HTTP 18123
user='default',
password='Zzl33818!',
database='stock',
settings={
'connect_timeout': 10,
'send_receive_timeout': 60,
}
)
def get_realtime_clickhouse_client():
"""获取高频五档数据 ClickHouse 客户端(带健康检查和自动重连)"""
global _realtime_clickhouse_client
with _realtime_clickhouse_client_lock:
if _realtime_clickhouse_client is None:
_realtime_clickhouse_client = _create_realtime_clickhouse_client()
print("[ClickHouse-Realtime] 创建新连接 (222.128.1.157)")
return _realtime_clickhouse_client
def execute(self, query, params=None):
"""执行 SQL 查询,返回结果列表"""
# 替换参数占位符
if params:
for key, value in params.items():
placeholder = f'%({key})s'
if isinstance(value, str):
query = query.replace(placeholder, f"'{value}'")
elif isinstance(value, (list, tuple)):
# 列表参数
if all(isinstance(v, str) for v in value):
values_str = ', '.join(f"'{v}'" for v in value)
else:
values_str = ', '.join(str(v) for v in value)
query = query.replace(placeholder, f"({values_str})")
elif isinstance(value, date):
query = query.replace(placeholder, f"'{value.isoformat()}'")
else:
query = query.replace(placeholder, str(value))
try:
_realtime_clickhouse_client.execute("SELECT 1")
except Exception as e:
print(f"[ClickHouse-Realtime] 连接失效,正在重连: {e}")
try:
_realtime_clickhouse_client.disconnect()
except Exception:
pass
_realtime_clickhouse_client = _create_realtime_clickhouse_client()
print("[ClickHouse-Realtime] 重连成功")
response = requests.post(
self.base_url,
params={
'database': self.database,
'user': self.user,
'password': self.password,
'default_format': 'JSONCompact',
},
data=query.encode('utf-8'),
timeout=30,
)
response.raise_for_status()
return _realtime_clickhouse_client
if response.text.strip():
result = response.json()
return result.get('data', [])
return []
except requests.exceptions.RequestException as e:
print(f"[ClickHouse-HTTP] 请求失败: {e}")
raise
_realtime_clickhouse_http = None
def get_realtime_clickhouse_client():
"""获取高频五档数据 ClickHouse HTTP 客户端"""
global _realtime_clickhouse_http
if _realtime_clickhouse_http is None:
_realtime_clickhouse_http = RealtimeClickHouseHTTP()
print("[ClickHouse-HTTP] 创建 HTTP 客户端 (222.128.1.157:18123)")
return _realtime_clickhouse_http
@app.route('/api/account/calendar/events', methods=['GET', 'POST'])