Speed up equity/position display after CTP reconnect and auto-refresh stale sessions before market open.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-03 21:17:15 +08:00
parent 61481d5749
commit d6776d2b8e
4 changed files with 110 additions and 21 deletions
+16 -6
View File
@@ -2583,7 +2583,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
since_connect = time.time() - float(
getattr(get_bridge(), "_last_connect_ok_ts", 0) or 0,
)
if since_connect < 45:
if since_connect < 90:
payload = dict(payload)
payload["sync_state"] = "syncing"
payload["sync_label"] = "持仓同步中…"
@@ -2771,7 +2771,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
position_hub.broadcast("positions", payload)
def _slow_sync() -> None:
time.sleep(20)
time.sleep(8)
try:
pl = _refresh_trading_live_snapshot(fast=False)
position_hub.set_snapshot(pl)
@@ -2828,13 +2828,17 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
conn.close()
def _slow_sync() -> None:
time.sleep(8)
time.sleep(3)
try:
_push_position_snapshot_async(fast=False)
except Exception as exc:
logger.debug("ctp connected slow sync: %s", exc)
threading.Thread(target=_slow_sync, daemon=True, name="ctp-slow-sync").start()
threading.Timer(
1.2,
lambda: _push_position_snapshot_async(fast=False),
).start()
except Exception as exc:
logger.debug("ctp connected monitor restore: %s", exc)
@@ -2954,9 +2958,11 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
@app.route("/api/trading/live")
@login_required
def api_trading_live():
mode = get_trading_mode(get_setting)
snap = position_hub.get_snapshot()
if snap:
return jsonify(_normalize_live_payload(snap))
payload = _apply_live_account(dict(snap), mode)
return jsonify(_normalize_live_payload(payload))
payload = _refresh_trading_live_snapshot(fast=True)
payload = _normalize_live_payload(payload)
position_hub.set_snapshot(payload)
@@ -2984,7 +2990,11 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
yield sse_format("positions", payload)
_push_position_snapshot_async(fast=True)
else:
yield sse_format("positions", snap)
mode = get_trading_mode(get_setting)
yield sse_format(
"positions",
_apply_live_account(dict(snap), mode),
)
while True:
try:
msg = q.get(timeout=25)
@@ -5045,7 +5055,7 @@ def install_trading(app, *, login_required, require_nav, get_db, get_setting, se
since_connect = now - float(
getattr(get_bridge(), "_last_connect_ok_ts", 0) or 0,
)
if connected and since_connect < 45:
if connected and since_connect < 90:
return _refresh_trading_live_snapshot(fast=True)
need_full = (
connected