Es ist notwendig, den Arbeitsablauf einer einfachen Speicherleckuntersuchung zu übergeben und anzufordern, deshalb habe ich ihn auch hier zusammengefasst
Ich habe Guppy und Heapy verwendet, aber Tracemalloc ist Standard in der 3.4-Serie, und ich kann den Unterschied zwischen Schnappschüssen erkennen. Ich denke, es ist in Ordnung, diesen in Zukunft zu wählen.
Installieren und verwenden Sie das pytracemalloc-Modul bis zur 3.3-Serie
import tracemalloc
tracemalloc.start()
# ... run your application ...
snapshot = tracemalloc.take_snapshot()
top_stats = snapshot.statistics('lineno')
Die Anzahl und Größe der zugewiesenen Blöcke wird für jede Zeile angezeigt, für die der Speicher von malloc zugewiesen wurde.
Dies reicht aus, um das Problem zu verstehen
import tracemalloc
tracemalloc.start()
# ... start your application ...
snapshot1 = tracemalloc.take_snapshot()
# ... call the function leaking memory ...
snapshot2 = tracemalloc.take_snapshot()
top_stats = snapshot2.compare_to(snapshot1, 'lineno')
print("[ Top 10 differences ]")
for stat in top_stats[:10]:
print(stat)
Da der Unterschied zwischen der Anzahl der Blöcke und der Größe jeder Zeile, in der malloc ausgeführt wurde, angezeigt wird, wird der Speicher, der auch bei Ausführung der Funktion nicht freigegeben wird, als Unterschied angezeigt.
Recommended Posts