問題初步定位
import tracemalloc
tracemalloc.start()
'''
運行代碼段
'''
snapshot = tracemalloc.take_snapshot()
top_stats = snapshots.statistics("lineno")
print("[top 10]")
for stat in top_ stats[:10]:
print(stat)
這樣可以獲取當前運行代碼中內存開銷的最大十條指令。
from collections import defaultdict
from gc import get_objects
before = defaultdict(int)
after = defaultdict(int)
for i in get_objects():
before[type(i)] += 1
#上面獲取的指令語句所在位置
for i in get_objects():
after[type(i)] += 1
print([(k, after[k]-before[k]) for k in after if after[k]-before[k]])
這樣就可以確定每次循環過程中這帶你語句泄露具體多少內存與泄露內存具體類型
matplotlib 庫中 transform.py 下的set_children這個函數在實時畫圖中會導致嚴重的內存泄漏。
先留個坑(目前手動釋放函數中的字典可以解決,但會導致繪圖最大化後縮小後佈局混亂的問題)