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