diff --git a/research/live/shadow_hb.py b/research/live/shadow_hb.py index 6d9c265..d344b91 100644 --- a/research/live/shadow_hb.py +++ b/research/live/shadow_hb.py @@ -76,6 +76,8 @@ from lib.shadow_budget import LAG_ALARM_MS, LAG_WINDOW, lag_healthy SITE = os.environ.get("SHADOW_SITE") or socket.gethostname() # 判「加 worker 有没有用」必须知道核数:CPU 密集的活,worker 超过核数不增吞吐 CORES = os.cpu_count() or 1 +# 判定要知道增量开没开,否则增量已生效时还会继续推荐「走增量」 +INCR_ON = os.environ.get("SHADOW_INCR", "1") not in ("0", "", "false") # 少于这么多根就不送去算。缠论要先有分型再有笔再有中枢,几十根出不来中枢, # 送过去只会白占一个计算槽 MIN_BARS = 200 @@ -838,17 +840,22 @@ class Shadow: """ if not np.isfinite(clear): return "样本不足,暂不判定" - if clear < 300: + if clear < 400: return f"清空 {clear:.0f}ms,宽裕,无需优化" if self.workers < CORES and q > i: return (f"排队为主且还有 {CORES - self.workers} 个空闲核 → " f"--workers 加到 {CORES}") - if len(SYMS) > CORES: - per = clear / max(len(SYMS) / max(self.workers, 1), 1) + if len(SYMS) <= CORES: + return f"清空 {clear:.0f}ms 偏高,但币数未超核数,先查别的争抢" + # 币数超核数:加 worker 不增吞吐,只能压单币耗时。但要看增量开没开, + # 否则会在增量已生效时继续推荐「走增量」——上线后实测踩到过 + if not INCR_ON: return (f"币数 {len(SYMS)} > 核数 {CORES},加 worker 无用(CPU 密集)" - f"。唯一出路是压单币耗时 {per:.0f}ms → 走增量 " - f"init_stream/append_bar(HANDOFF §5.5,实测约 3.7x)") - return f"清空 {clear:.0f}ms 偏高,但币数未超核数,先查是否有别的争抢" + f"。压单币耗时 → 开 SHADOW_INCR=1 走增量(实测 3.56x)") + return (f"币数 {len(SYMS)} > 核数 {CORES},且增量已生效。单币 {i:.0f}ms " + f"里 chan 构建仅约 22ms,其余是 build_htf_zones / " + f"find_fast_bsp3 / attach_htf_context —— 要继续压得改这三个," + f"或减币") async def run(self) -> None: await self.start()