"""策略账户快照,供采集线程读取。""" 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)