From ce1988118145f3c5a69cf72441253f44ab038a88 Mon Sep 17 00:00:00 2001 From: zzlgreat Date: Wed, 26 Nov 2025 09:06:02 +0800 Subject: [PATCH] update pay function --- app_vx.py | 55 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 19 deletions(-) diff --git a/app_vx.py b/app_vx.py index ddff76e9..190a3045 100644 --- a/app_vx.py +++ b/app_vx.py @@ -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( - host='222.128.1.157', - port=18000, - user='default', - password='Zzl33818!', - database='stock', - pool_size=10, # 核心连接数 - max_overflow=15, # 最大溢出连接数,总共支持 25 并发 - connection_timeout=10, # 连接超时 10 秒 - query_timeout=30, # 查询超时 30 秒 - health_check_interval=60 # 60 秒未使用的连接进行健康检查 -) +# 初始化全局 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=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',