Files
big-qmt/py-client/libs/snapshot.py

30 lines
903 B
Python
Raw Normal View History

2026-09-11 13:35:21 +08:00
"""策略账户快照,供采集线程读取。"""
from copy import deepcopy
from threading import Lock
from sdk import Assets, DealItem, PositionItem
_collector_lock = Lock()
_collector_snapshot: tuple[str, Assets, list[PositionItem], list[DealItem]] | None = None
def cache_portfolio(
account_id: str,
assets: Assets,
positions: list[PositionItem],
deals: list[DealItem],
) -> None:
"""整体替换最新快照,策略线程不执行序列化和网络上报。"""
global _collector_snapshot
with _collector_lock:
_collector_snapshot = (account_id, assets, positions, deals)
def get_collector_snapshot() -> tuple[str, Assets, list[PositionItem], list[DealItem]] | None:
"""供 scheduler 读取;复制在锁外执行,不阻塞下一轮缓存更新。"""
with _collector_lock:
snapshot = _collector_snapshot
return deepcopy(snapshot)