Agenda

Pablo Galindo
Victor Terrón

Core / ES

Ebury

07 Octubre 2018, 14:30 - 14:55

Hora de sacar la basura: garbage collector

Uno de los motivos por los que programar en Python es cómodo y sencillo es que no tenemos que preocuparnos por el tiempo de vida de nuestros objetos. Es decir, una vez que deja de ser necesaria, una variable desaparece de la memoria “magicamente”. Esto puede —erróneamente— llevarnos a creer que no es necesario preocuparnos por lo que ocurre entre bastidores.

Nada más alejado de la realidad: conocer cómo Python gestiona la memoria es fundamental en ciertos escenarios, y desconocer qué está ocurriendo puede tener consecuencias tan importantes como desagradables. Por ejemplo, si nuestros programas gestionan una gran cantidad de datos al mismo tiempo o lanzan múltiples processos en paralelo esto deja de ser una cuestión teórica y convierte en algo que a nosotros, mentes pragmáticas, también nos importa.

Python utiliza para manejar la memoria una estrategia combinada consistente en dos intimidantes términos: (1) conteo de referencias y (2) colector de basura generacional. Entender cómo ambos sistemas trabajan juntos y cuáles son las limitaciones de cada uno nos ayudará a entender aspectos específicos de nuestra programación del día a día. Ejemplos: (a) qué ocurre con la memoria exactamente cuando hay multiples hilos o procesos, (b) qué pasa si nuestras estructuras de datos se contienen a si mismas, un escenario posible al trabajar con grafos, o (c) qué hace Python con los valores temporales que se producen, sin ir más lejos, al sumar dos números o dos arrays de NumPy.

Aunque estos conceptos suelen considerarse avanzados y difíciles de entender, veremos que no es así. Éste no es un asunto meramente teórico ni es difícil encontrar sus aplicaciones prácticas. En esta charla explicaremos por qué es algo que debe importarnos y hablaremos de cómo aplicar los conocimientos que hemos adquirido a problemas específicos.

Resumen esquemático de la charla:

  1. Repaso express: qué son las variables en Python
    1. Variables como etiquetas
    2. Variables vs objetos
  2. Qué es la recoleción de basura.
  3. Conteo por referencias
    1. Qué problema resuelve.
    2. Problemas del conteo por referencia.
      1. Hilos
      2. Ciclos
  4. Recolector de basura para ciclos
    1. Las tres generaciones.
    2. El algoritmo
  5. Aplicaciones prácticas y conocimiento útil.
    1. Que ocurre al implementar del().
    2. Copy-on-write.
    3. __slots__
    4. Hilos versus procesos.
    5. Extras