Skip to content

Commit 4b0b6ee

Browse files
committed
Throttle marimo rendering
1 parent 0f5c0ca commit 4b0b6ee

1 file changed

Lines changed: 15 additions & 3 deletions

File tree

pymc/progress_bar/marimo_progress.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ def __init__(
114114
self._mo_replace: Callable[[object], None] | None = None
115115
self._task_state: list[dict[str, Any]] = []
116116
self._start_times: list[float] = []
117+
self._last_render_time: float = 0.0
118+
self._min_render_interval: float = 0.1
117119

118120
@property
119121
def is_enabled(self) -> bool:
@@ -187,7 +189,10 @@ def update(
187189
if is_last:
188190
self._task_state[task_id]["completed"] = self._task_state[task_id]["total"]
189191

190-
self._render()
192+
now = perf_counter()
193+
if is_last or (now - self._last_render_time) >= self._min_render_interval:
194+
self._last_render_time = now
195+
self._render()
191196

192197
def _render(self) -> None:
193198
"""Render HTML progress display to marimo output."""
@@ -299,6 +304,8 @@ def __init__(self, theme: str | None = None):
299304
self._mo_replace: Callable[[object], None] | None = None
300305
self._start_time: float = 0.0
301306
self._task_id = 0
307+
self._last_render_time: float = 0.0
308+
self._min_render_interval: float = 0.1
302309

303310
def __enter__(self) -> Self:
304311
"""Enter the context manager."""
@@ -313,7 +320,7 @@ def __enter__(self) -> Self:
313320

314321
def __exit__(self, exc_type, exc_val, exc_tb) -> None:
315322
"""Exit the context manager with final render."""
316-
self._render()
323+
self._render(force=True)
317324

318325
def add_task(
319326
self, description: str, completed: int = 0, total: int | None = None, **kwargs
@@ -368,13 +375,18 @@ def update(
368375
if refresh:
369376
self._render()
370377

371-
def _render(self) -> None:
378+
def _render(self, force: bool = False) -> None:
372379
"""Render HTML progress to marimo output."""
373380
if self._mo_replace is None:
374381
return
375382

383+
now = perf_counter()
384+
if not force and (now - self._last_render_time) < self._min_render_interval:
385+
return
386+
376387
import marimo as mo
377388

389+
self._last_render_time = now
378390
html = self._render_html()
379391
self._mo_replace(mo.Html(html))
380392

0 commit comments

Comments
 (0)