atexit registra funciones que se ejecutan cuando el intérprete termina normalmente. Es apropiado para una limpieza pequeña y local, como quitar un marcador temporal o emitir una última métrica.

Ejemplo práctico

import atexit
from pathlib import Path

temporary = Path("job.lock")
temporary.touch()

@atexit.register
def remove_lock() -> None:
    temporary.unlink(missing_ok=True)
    print("lock removed")

Orden y argumentos

Las funciones se ejecutan en orden inverso al registro. register() también admite argumentos, pero una función breve y sin dependencias frágiles resulta más predecible durante el cierre.

Qué no debes delegar

No lo uses como única forma de guardar datos importantes. El proceso puede recibir SIGKILL, sufrir un fallo fatal o detenerse antes de terminar. Guarda el progreso de forma atómica durante el trabajo.

Prioriza un context manager

Cuando un recurso tiene un alcance claro, with cierra archivos, conexiones y locks en el momento correcto, incluso ante excepciones. Reserva atexit para recursos ligados a toda la vida del proceso.

Sigue aprendiendo

Refuerza la base con manejo de errores en Python. A documentación oficial de Python, consultada el 22 de julio de 2026, detalla la API, las limitaciones y las diferencias entre versiones.