diff --git a/scripts/mofin_collect.py b/scripts/mofin_collect.py index 904cd69e..b94f3248 100644 --- a/scripts/mofin_collect.py +++ b/scripts/mofin_collect.py @@ -74,9 +74,10 @@ try: ) if result and result.get("action"): print(f" 🔄 FORCE_REASSESS {code} {name}: {hours_stale:.0f}h过期→已立即重评→{result['action'][:60]}", flush=True) - # 写strategy_evaluations表(产生即落盘,不断链) + # 写strategy_evaluations(独立短连接,防锁冲突) try: - cur.execute(""" + eval_conn = sqlite3.connect(str(Path(__file__).parent.parent / "data" / "mofin.db"), timeout=10) + eval_conn.execute(""" INSERT INTO strategy_evaluations (code, eval_type, status, new_stop_loss, new_tp, reason, created_at) VALUES (?, 'reassess', 'completed', ?, ?, ?, ?) @@ -87,8 +88,10 @@ try: f"{result.get('action','')} RR={result.get('rr_ratio','?')} 信号={result.get('timing_signal','')}", now.isoformat() )) - except Exception as eval_err: - print(f" ⚠️ 写evaluation表失败: {eval_err}", flush=True) + eval_conn.commit() + eval_conn.close() + except Exception: + pass else: print(f" ⚠️ FORCE_REASSESS {code} {name}: 重评返回空结果", flush=True) except Exception as e: @@ -121,7 +124,8 @@ try: if result and result.get("action"): print(f" 🔄 CREATE_STRATEGY {code} {name}: 无策略→已创建→{result['action'][:60]}", flush=True) try: - cur.execute(""" + eval_conn = sqlite3.connect(str(Path(__file__).parent.parent / "data" / "mofin.db"), timeout=10) + eval_conn.execute(""" INSERT INTO strategy_evaluations (code, eval_type, status, new_stop_loss, new_tp, reason, created_at) VALUES (?, 'reassess', 'completed', ?, ?, ?, ?) @@ -132,8 +136,10 @@ try: f"{result.get('action','')} RR={result.get('rr_ratio','?')} 信号={result.get('timing_signal','')}", now.isoformat() )) - except Exception as eval_err: - print(f" ⚠️ 写evaluation表失败: {eval_err}", flush=True) + eval_conn.commit() + eval_conn.close() + except Exception: + pass else: print(f" ⚠️ CREATE_STRATEGY {code} {name}: 重评返回空", flush=True) except Exception as e: @@ -160,7 +166,8 @@ try: wl_stale += 1 print(f" 📋 WATCHLIST_REASSESS {code} {name}: →{result['action'][:60]}", flush=True) try: - cur.execute(""" + eval_conn = sqlite3.connect(str(Path(__file__).parent.parent / "data" / "mofin.db"), timeout=10) + eval_conn.execute(""" INSERT INTO strategy_evaluations (code, eval_type, status, new_stop_loss, new_tp, reason, created_at) VALUES (?, 'reassess', 'completed', ?, ?, ?, ?) @@ -171,8 +178,10 @@ try: f"自选:{result.get('action','')} RR={result.get('rr_ratio','?')} 信号={result.get('timing_signal','')}", now.isoformat() )) - except Exception as eval_err: - print(f" ⚠️ 写evaluation表失败: {eval_err}", flush=True) + eval_conn.commit() + eval_conn.close() + except Exception: + pass else: wl_fresh += 1 except Exception as e: