update pay function

This commit is contained in:
2025-11-26 09:06:02 +08:00
parent bef3e86f60
commit ce19881181

View File

@@ -130,14 +130,19 @@ class ClickHouseConnectionPool:
logger.info(f"ClickHouse 连接池初始化完成: pool_size={pool_size}, max_overflow={max_overflow}")
def _init_pool(self):
"""初始化连接池,预创建核心连接"""
for _ in range(self.pool_size):
"""初始化连接池,预创建部分核心连接(非阻塞)"""
# 只预创建 2 个连接,其余按需创建
init_count = min(2, self.pool_size)
for i in range(init_count):
try:
conn = self._create_connection()
if conn:
self._pool.put(conn)
logger.info(f"预创建 ClickHouse 连接 {i+1}/{init_count} 成功")
except Exception as e:
logger.warning(f"预创建 ClickHouse 连接失败: {e}")
logger.warning(f"预创建 ClickHouse 连接失败 ({i+1}/{init_count}): {e}")
# 预创建失败不阻塞启动,后续按需创建
break
def _create_connection(self):
"""创建新的 ClickHouse 连接"""
@@ -325,19 +330,30 @@ class ClickHouseConnectionPool:
logger.info("ClickHouse 连接池已关闭所有连接")
# 初始化全局 ClickHouse 连接池
clickhouse_pool = ClickHouseConnectionPool(
# 初始化全局 ClickHouse 连接池(懒加载模式)
clickhouse_pool = None
_pool_lock = Lock()
def _init_clickhouse_pool():
"""懒加载初始化 ClickHouse 连接池"""
global clickhouse_pool
if clickhouse_pool is None:
with _pool_lock:
if clickhouse_pool is None:
clickhouse_pool = ClickHouseConnectionPool(
host='222.128.1.157',
port=18000,
user='default',
password='Zzl33818!',
database='stock',
pool_size=10, # 核心连接数
max_overflow=15, # 最大溢出连接数,总共支持 25 并发
pool_size=5, # 减少预创建连接数
max_overflow=20, # 增加溢出连接数,总共支持 25 并发
connection_timeout=10, # 连接超时 10 秒
query_timeout=30, # 查询超时 30 秒
health_check_interval=60 # 60 秒未使用的连接进行健康检查
)
)
return clickhouse_pool
# ===================== ClickHouse 连接池实现结束 =====================
app = Flask(__name__)
Compress(app)
@@ -1421,7 +1437,7 @@ def update_investment_preferences():
def get_clickhouse_client():
"""
获取 ClickHouse 客户端(使用连接池)
获取 ClickHouse 客户端(使用连接池,懒加载
返回连接池对象,支持两种使用方式:
@@ -1434,14 +1450,15 @@ def get_clickhouse_client():
with client.connection() as conn:
result = conn.execute("SELECT * FROM table")
"""
return clickhouse_pool
return _init_clickhouse_pool()
@app.route('/api/system/clickhouse-pool-status', methods=['GET'])
def api_clickhouse_pool_status():
"""获取 ClickHouse 连接池状态(仅供监控使用)"""
try:
status = clickhouse_pool.get_pool_status()
pool = _init_clickhouse_pool()
status = pool.get_pool_status()
return jsonify({
'code': 200,
'message': 'success',