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