From 8ba80b3266d5c728da41e9dfb7b427f61ba6a233 Mon Sep 17 00:00:00 2001 From: yawiii <77927734@qq.com> Date: Thu, 9 Apr 2026 16:07:38 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=8D=E4=BD=8E=E6=B5=81=E5=BC=8F=E8=BE=93?= =?UTF-8?q?=E5=87=BA=E6=97=A5=E5=BF=97=E7=9A=84=E5=88=B7=E6=96=B0=E9=A2=91?= =?UTF-8?q?=E7=8E=87=EF=BC=8C=E6=94=B9=E6=88=90=200.3=20=E7=A7=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/common.py | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/utils/common.py b/utils/common.py index 8eeda68..6e37e73 100644 --- a/utils/common.py +++ b/utils/common.py @@ -296,6 +296,7 @@ class ProgressBar: self._state = self.STATE_WAITING self._char_count = 0 self._start_time = time.perf_counter() + self._last_refresh_time = 0.0 # 新增:记录最后一次刷新时间,用于限流 self._closed = False self._stop_event = threading.Event() self._timer_thread = None @@ -306,7 +307,7 @@ class ProgressBar: _global_last_output_len = 0 # 立即显示"等待响应" - self._refresh() + self._refresh(force=True) # 仅在流式模式下启动定时刷新线程(非流式模式采用静态日志,无需跳秒刷新) if self._streaming: @@ -350,10 +351,17 @@ class ProgressBar: else: return "" - def _refresh(self) -> None: + def _refresh(self, force: bool = False) -> None: """内部刷新方法:单行覆盖输出""" if self._closed: return + + # 降频处理:如果非强制刷新,则限制最高频率为 0.3 秒一次,避免因环境不支持动态覆盖而疯狂刷屏 + now = time.perf_counter() + if not force and (now - self._last_refresh_time < 0.3): + return + + self._last_refresh_time = now output = self._render() if not output: @@ -388,10 +396,10 @@ class ProgressBar: try: while not self._stop_event.is_set() and not self._closed: # 定时刷新当前内容(主要用于更新 WAITING 阶段的时间) - self._refresh() + self._refresh(force=True) - # 每 0.1 秒刷新一次 - if self._stop_event.wait(0.1): + # 降低刷新频率:每 0.3 秒刷新一次,大幅减少不支持动态覆盖时的刷屏 + if self._stop_event.wait(0.3): break except Exception: pass # 守护线程异常不应影响主流程 @@ -408,7 +416,7 @@ class ProgressBar: self._state = self.STATE_GENERATING self._char_count = char_count - self._refresh() # 状态变化时总是刷新 + self._refresh(force=True) # 状态变化时总是强制刷新 def update(self, char_count: int) -> None: """ @@ -425,9 +433,9 @@ class ProgressBar: self._char_count = char_count - # 流式模式:高频刷新 + # 流式模式:高频刷新 (实际频率受 _refresh 内的降频限制) if self._streaming: - self._refresh() + self._refresh(force=False) # 静态模式:不在这里刷新,只有状态变化时才刷新 def done(self, message: str = None, char_count: int = None, elapsed_ms: int = None) -> None: