Memory leak: page.on() event listeners never removed on close
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
Línea de trabajo
Lee local_browser.py alrededor de _attach_page_listeners() en las líneas 370-372 y _close_async() en la línea 533; después, rastrea cómo se borra self._page en la línea 541. Confirma que los controladores de console y pageerror se desvinculan durante el cierre y que se borra el estado de limpieza, sin que escapen errores al eliminar listeners.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
In local_browser.py, _attach_page_listeners() (line 370-372) registers page.on('console', ...) and page.on('pageerror', ...) handlers, but these are never removed in _close_async() (line 533).
The _close_async() method nullifies the self._page reference (line 541) but never calls page.remove_listener(). The Playwright pyee event emitter retains references to the bound methods, creating a memory leak.
Impact
- Over long agent runs, listener references accumulate
- Each listener closure captures the bound method, preventing GC
- Memory grows linearly with agent steps
- This is a known pattern - the Playwright Python repo has multiple confirmed reports of memory leaks from orphaned
page.on()handlers
Suggested Fix
Store the listener removal in a cleanup list and call _detach_page_listeners() at the start of _close_async():
def _attach_page_listeners(self, page):
def on_console(msg): self._on_console_message(msg)
def on_page_error(err): self._on_page_error(err)
page.on("console", on_console)
page.on("pageerror", on_page_error)
self._page_cleanup = [
lambda: page.remove_listener("console", on_console),
lambda: page.remove_listener("pageerror", on_page_error),
]
def _detach_page_listeners(self):
for cleanup in self._page_cleanup:
try:
cleanup()
except Exception:
pass
self._page_cleanup = []
- Lenguaje dominante
- Python
- Estrellas
- 6k
- Forks
- 385
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de microsoft/Webwright
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 78/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
persistent_local_browser broken on Windows: signal.SIGTERM and start_new_session are POSIX-only Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 72/100
Todos los issues de microsoft/Webwright
Issues similares
-
documentation help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
simonw/sqlite-utils#872 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100