이번에 들어간 내용
한투 호가 = 2번째 앱키 전용 키 없거나 start 실패 시 메인에 H0STASP0 안 붙임. 운영설정 WS_ORDERBOOK_SAVE_KIS 빨간 danger. LS RAM 합집합 후보∪보유∪영구∪grace. sync_targets와 split reconcile 둘 다. 틱 DB 영구 게이트는 그대로. 분봉 쓰레기 → 다음 소스 봉 통째 그 분 틱 0건이거나 전부 봉끝 대비 LIVE_FEED_FALLBACK_MAX_AGE_SEC 초과면 구멍. 메인 WS → 2차 → LS → REST → rollup. CANDLE_GARBAGE_FALLBACK 기본 true. 파일: feed_fallback.py(신규), ws_manager.py, kis_ws.py, candle_series.py, bt_candle_source.py, live_config_schema.py, database.py, 스모크, MD 2개. 같은 ws_manager/database/kis_ws/live_config에는 직전 커밋 이후 쌓여 있던 시세 폴백·ENV 키 정리도 같이 들어갔습니다. 파일 단위로 나눌 수 없어서입니다.
This commit is contained in:
@@ -124,6 +124,7 @@ class WsProbe:
|
||||
self._ws = None
|
||||
self._thread: Optional[threading.Thread] = None
|
||||
self._done = threading.Event()
|
||||
self._sent_codes: List[str] = []
|
||||
|
||||
def _build_sub(self, code: str, subscribe: bool = True) -> str:
|
||||
return json.dumps({
|
||||
@@ -223,6 +224,7 @@ class WsProbe:
|
||||
time.sleep(self.gap_sec)
|
||||
try:
|
||||
app.send(self._build_sub(code, True))
|
||||
self._sent_codes.append(code)
|
||||
self.logger.info(" [WS] subscribe sent: %s", code)
|
||||
except Exception as e:
|
||||
self.logger.warning(" [WS] subscribe fail %s: %s", code, e)
|
||||
@@ -242,6 +244,18 @@ class WsProbe:
|
||||
self._thread = threading.Thread(target=_runner, daemon=True)
|
||||
self._thread.start()
|
||||
self._done.wait(timeout=hold_sec + 15.0)
|
||||
gap = max(0.0, float(self.gap_sec or 0.12))
|
||||
if self._ws and self._sent_codes:
|
||||
self.logger.info(" [WS] unsubscribe %d 후 close", len(self._sent_codes))
|
||||
for i, code in enumerate(self._sent_codes):
|
||||
if i > 0 and gap > 0:
|
||||
time.sleep(gap)
|
||||
try:
|
||||
self._ws.send(self._build_sub(code, False))
|
||||
except Exception:
|
||||
pass
|
||||
if gap > 0:
|
||||
time.sleep(gap)
|
||||
try:
|
||||
if self._ws:
|
||||
self._ws.close()
|
||||
|
||||
Reference in New Issue
Block a user