atexit registra funções executadas quando o interpretador termina normalmente. Ele serve para limpeza pequena e local, como remover um marcador temporário ou emitir uma última métrica.
Exemplo prático
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")
Ordem e argumentos
As funções rodam na ordem inversa ao registro. register() também aceita argumentos, mas uma função curta, sem dependências frágeis, é mais previsível durante o desligamento.
O que não delegar ao handler
Não confie nele como única forma de salvar dados importantes. O processo pode receber SIGKILL, sofrer uma falha fatal ou ser interrompido antes da conclusão. Grave progresso de forma atômica durante o trabalho.
Context manager primeiro
Quando um recurso tem escopo claro, with fecha arquivos, conexões e locks no ponto correto, inclusive diante de exceções. Reserve atexit para recursos ligados à vida inteira do processo.
Continue estudando
Aprofunde a base com tratamento de erros em Python. A documentação oficial do Python, consultada em 22 de julho de 2026, detalha a API, as limitações e as diferenças entre versões.