Lidando com memória em uma aplicação Python que rodará por um longo tempo

O Python tem um garbage collector, mas não é tão bom quanto o Java, então em algumas aplicações para rodar initerruptamente é importante monitorar o estado da memória do programa e apagar da memória variáveis e objetos não utilizados.

Visualizando a memória utilizada pelo seu programa no Python

Usando o resource

Se o Python rodar em Linux, basta usar a biblioteca resource:

[code language="python"] import resource resource.getrusage(resource.RUSAGE_SELF).ru_maxrss [/code]

Usando o memory_profiler

Mostra o uso da memória em tempo real no console https://www.dev2qa.com/python-profile-memory-usage-and-object-graph-example/

Usando o objgraph

Cria um grafo das relações entre os objetos no programa. https://www.dev2qa.com/python-profile-memory-usage-and-object-graph-example/

Outras dicas para otimizar memória

https://dzone.com/articles/python-memory-issues-tips-and-tricks

Forçando Python a limpar a memória

Chamando o garbage collector

gc.collect

Marcando variáveis e objetos para serem deletados pelo garbage collector

chamar o del:

Dando override no método __del__

implementando seu próprio __del__

Resposta interessante sobre como limpar a memória

https://stackoverflow.com/a/38545526/2789895

You should also read: