15.12.2022 Views

Python Eficaz

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

perfil de desempenho são mais precisas.

• O método runcall, presente no objeto Profile, oferece tudo o que precisamos

para traçar o perfil, em prefeito isolamento, das chamadas a uma árvore de

funções.

• O objeto Stats permite selecionar e imprimir o subconjunto apropriado de

informações de perfil de desempenho para que possamos entender o

desempenho do programa.

Item 59: Use tracemalloc para entender o uso e os

vazamentos de memória

O gerenciamento de memória na implementação default do Python, o

interpretador CPython, usa contagem de referência. Isso garante que, no

momento em que todas as referências ao objeto deixarem de existir (expirarem),

o objeto referenciado seja também apagado. O CPython também tem um

detector nativo de ciclos para garantir que objetos que se autorreferenciem sejam

recolhidos como lixo periodicamente.

Em tese, isso significa que a maioria dos programadores em Python não precisa

se preocupar com alocação e desalocação manual em seus programas. A

linguagem cuida disso automaticamente, por meio do interpretador CPython. Na

prática, contudo, alguns programas esgotam sua memória por conta de

referências travadas. Descobrir onde seus programas em Python estão

consumindo ou mesmo vazando memória às vezes é um pesadelo.

A primeira técnica para se depurar o uso de memória é pedir ao módulo nativo

gc uma lista de todos os objetos reconhecidos pelo coletor de lixo (garbage

collector). Embora seja uma ferramenta um tanto brusca, esse recurso permite ter

uma noção rápida de como a memória de seu programa está sendo usada.

No exemplo a seguir, o programa desperdiça memória ao manter as referências

ativas todo o tempo. Uma contagem dos objetos criados durante a execução é

mostrada na tela, bem como uma pequena amostra dos objetos.

# using_gc.py

import gc

found_objects = gc.get_objects()

print('%d objects before' % len(found_objects))

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!