15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

>>>

print(stat)

waste_memory.py:6: size=2235 KiB (+2235 KiB), count=29981 (+29981), average=76 B

waste_memory.py:7: size=869 KiB (+869 KiB), count=10000 (+10000), average=89 B

waste_memory.py:12: size=547 KiB (+547 KiB), count=10000 (+10000), average=56 B

Fica imediatamente claro quais objetos estão dominando o uso de memória em

meu programa e quais trechos do código-fonte alocam esses objetos.

O módulo tracemalloc também pode mostrar o rastro da pilha (stack trace)

completo para cada alocação (o limite é o número de quadros de pilha passados

ao método start). No exemplo a seguir, mostramos o stack trace do responsável

pelo maior uso de memória no programa:

# with_trace.py

# ...

stats = time2.compare_to(time1, 'traceback')

top = stats[0]

print('\n'.join(top.traceback.format()))

>>>

File "waste_memory.py", line 6

self.x = os.urandom(100)

File "waste_memory.py", line 12

obj = MyObject()

File "waste_memory.py", line 19

deep_values.append(get_data())

File "with_trace.py", line 10

x = waste_memory.run()

Um stack trace como esse é valioso para descobrir em que situação uma função

comum é responsável pelo consumo de memória do programa.

Infelizmente, o Python 2 não oferece o módulo tracemalloc nativamente. Há

pacotes open source para rastrear o uso de memória no Python 2 (como o

heapy), mas esses não replicam totalmente a funcionalidade do tracemalloc.

Lembre-se

• Pode ser difícil entender como os programas em Python usam memória e

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!