Documentación del recolector de basura de Python [cerrado]


132

Estoy buscando documentos que describan en detalle cómo funciona la recolección de basura de Python.

Me interesa lo que se hace en qué paso. ¿Qué objetos hay en estas 3 colecciones? ¿Qué tipos de objetos se eliminan en cada paso? ¿Qué algoritmo se usa para encontrar ciclos de referencia?

Antecedentes: estoy implementando algunas búsquedas que tienen que finalizar en poco tiempo. Cuando el recolector de basura comienza a recolectar la generación más antigua, es "mucho" más lenta que en otros casos. Tomó más tiempo del previsto para las búsquedas. Estoy buscando cómo predecir cuándo recolectará la generación más antigua y cuánto tiempo llevará.

Es fácil predecir cuándo recolectará la generación más antigua con get_count()y get_threshold(). Eso también puede ser manipulado con set_threshold(). Pero no veo cuán fácil de decidir es mejor hacer collect()por la fuerza o esperar la recolección programada.

Respuestas:


126

No hay un recurso definitivo sobre cómo Python realiza su recolección de basura (aparte del código fuente en sí), pero esos 3 enlaces deberían darle una idea bastante buena.

Actualizar

La fuente es realmente bastante útil. La cantidad que obtienes depende de qué tan bien leas C, pero los comentarios son realmente muy útiles. Salte a la collect()función y los comentarios explican bien el proceso (aunque en términos muy técnicos).


3
CPython ya no usa Subversion. Se cambiaron a Mercurial alojado en hg.python.org. Como no puedo encontrar la manera de vincular a la versión actual de un archivo en ese sitio, en su lugar, vincularé a un espejo GitHub no oficial .
Marius Gedminas

1
No importa eso, descubrí cómo vincular al último gcmodule.c en el sitio oficial. Todavía encuentro que GitHub es más legible.
Marius Gedminas

aprender mucho. Thx
gus

1
El primer enlace no apunta a nada relacionado con la recolección de basura de Python. Por favor actualice el enlace.
Manish Barnwal
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.