fix: avoid SQLite lock on fast position poll by skipping DB writes

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-25 15:14:22 +08:00
parent 12a30d4f0c
commit c302e1f3ca
3 changed files with 34 additions and 7 deletions
+4 -3
View File
@@ -33,6 +33,7 @@ from position_stream import position_hub, start_position_worker
from ctp_reconnect import start_ctp_reconnect_worker
from ctp_premarket_connect import start_ctp_premarket_connect_worker
from ctp_fee_worker import start_ctp_fee_worker
from db_conn import execute_retry
from sl_tp_guard import (
cancel_monitor_exit_orders,
ensure_monitor_order_columns,
@@ -480,7 +481,8 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
open_time_val = ctp_open
elif ctp_open:
open_time_val = ctp_open
conn.execute(
execute_retry(
conn,
"""UPDATE trade_order_monitors SET lots=?, entry_price=?,
open_time=? WHERE id=?""",
(
@@ -684,7 +686,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
break
elif key in ctp_by_key:
used_ctp_keys.add(key)
if ctp and mon:
if ctp and mon and not fast:
_sync_monitor_lots_from_ctp(
conn, int(mon["id"]), mon.get("symbol") or "",
mon.get("direction") or "long", mode, ctp=ctp,
@@ -896,7 +898,6 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
try:
init_strategy_tables(conn)
payload = _build_trading_live_payload(conn, fast=True)
conn.commit()
position_hub.set_snapshot(payload)
return jsonify(payload)
finally: