欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python 内存泄漏定位

程序员文章站 2022-03-21 16:34:31
...

问题初步定位

 

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 = defultdicts(int)

after = defultdicts(int)



for i in get_objects():

    befor[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这个函数在实时画图中会导致严重的内存泄漏。

先留个坑(目前手动释放函数中的字典可以解决,但会导致绘图最大化后缩小后布局混乱的问题)