From cfeec11929ad120f0fc0aa9fe1b589c4c014ddb8 Mon Sep 17 00:00:00 2001 From: freedakgmail Date: Wed, 22 Jul 2026 07:40:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20scheduler.py=20?= =?UTF-8?q?=E5=92=8C=20sim=5Ftrade.py=20=E4=B8=AD=E6=99=BA=E8=83=BD?= =?UTF-8?q?=E5=BC=95=E6=93=8E=E8=B0=83=E7=94=A8=E8=BF=9E=E6=8E=A5=E6=B3=84?= =?UTF-8?q?=E6=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - scheduler.py: job_morning_trade/job_afternoon_trade 智能引擎 put_db 移到 finally - sim_trade.py: trigger_trade 降级路径 put_db 移到 finally,初始化 conn=None - 统一使用 smart_conn 变量名避免与外层 conn 冲突 --- stock-html/routes/sim_trade.py | 23 +++++++++++++++-------- stock-html/services/scheduler.py | 22 ++++++++++++++-------- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/stock-html/routes/sim_trade.py b/stock-html/routes/sim_trade.py index e0f981e..1ad05b6 100644 --- a/stock-html/routes/sim_trade.py +++ b/stock-html/routes/sim_trade.py @@ -648,15 +648,22 @@ def trigger_trade(): # 降级: 使用旧引擎 from services.scheduler import execute_auto_trade_for_user - conn = get_db() - if conn: - cur = conn.cursor(cursor_factory=RealDictCursor) - cur.execute("SELECT trade_quantity FROM sim_config WHERE user_id = %s", (user_id,)) - config = cur.fetchone() - trade_quantity = config['trade_quantity'] if config else 1000 - put_db(conn) - else: + conn = None + try: + conn = get_db() + if conn: + cur = conn.cursor(cursor_factory=RealDictCursor) + cur.execute("SELECT trade_quantity FROM sim_config WHERE user_id = %s", (user_id,)) + config = cur.fetchone() + trade_quantity = config['trade_quantity'] if config else 1000 + else: + trade_quantity = 1000 + except Exception as e: + print(f"[trigger_trade] 获取交易配置失败: {e}") trade_quantity = 1000 + finally: + if conn: + put_db(conn) result = execute_auto_trade_for_user(user_id, trade_quantity) diff --git a/stock-html/services/scheduler.py b/stock-html/services/scheduler.py index 01061aa..c14ef69 100644 --- a/stock-html/services/scheduler.py +++ b/stock-html/services/scheduler.py @@ -514,19 +514,22 @@ def job_morning_trade(): for user in users: user_id = user['user_id'] # 尝试使用智能引擎 + smart_conn = None try: from services.smart_trade_engine import execute_smart_trade from db import get_db, put_db - conn = get_db() - if conn: - result = execute_smart_trade(conn, user_id, scan_date=None) - put_db(conn) + smart_conn = get_db() + if smart_conn: + result = execute_smart_trade(smart_conn, user_id, scan_date=None) if result.get('success'): print(f"[定时任务] 用户{user_id} 智能引擎执行成功 " f"(算法:{result.get('algo','?')}, 信号:{result.get('signals',0)})") continue except Exception as e: print(f"[定时任务] 用户{user_id} 智能引擎异常,降级到旧引擎: {e}") + finally: + if smart_conn: + put_db(smart_conn) # 降级:使用旧引擎 trade_quantity = user.get('trade_quantity') or 1000 @@ -553,18 +556,21 @@ def job_afternoon_trade(): for user in users: user_id = user['user_id'] # 尝试使用智能引擎 + smart_conn = None try: from services.smart_trade_engine import execute_smart_trade from db import get_db, put_db - conn = get_db() - if conn: - result = execute_smart_trade(conn, user_id, scan_date=today) - put_db(conn) + smart_conn = get_db() + if smart_conn: + result = execute_smart_trade(smart_conn, user_id, scan_date=today) if result.get('success'): print(f"[定时任务] 用户{user_id} 午后智能引擎执行成功") continue except Exception as e: print(f"[定时任务] 用户{user_id} 智能引擎异常,降级: {e}") + finally: + if smart_conn: + put_db(smart_conn) trade_quantity = user.get('trade_quantity') or 1000 execute_auto_trade_for_user(user_id, trade_quantity, scan_date=today)