python 內存泄漏定位

問題初步定位

 

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這個函數在實時畫圖中會導致嚴重的內存泄漏。

先留個坑(目前手動釋放函數中的字典可以解決,但會導致繪圖最大化後縮小後佈局混亂的問題)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章