对我问题的描述
我试图在python3.6程序中查找一个内存泄漏。
为此,我正在测试tracemalloc,它允许我比较内存快照并打印一个“回溯”。
返回跟踪中的最大帧数应该设置为tracemalloc.start()的第一个参数,根据文档。
然而,在我的最小测试设置(下面的代码)中,我使用参数25启动tracemalloc,但是我在回跟踪中只得到了1帧,在这里我期望2:
我得到的作为输出
me@my_machine:/tmp$ python ./test_tm.py
Entry: /tmp/test_tm_utils.py:2: size=3533 KiB (+3533 KiB), count=99746 (+99746), average=36 B
Traceback:
/tmp/test_tm_utils.py:2我所期望的产出
我希望有两行,像这样:
Entry: /tmp/test_tm_utils.py:2: size=3533 KiB (+3533 KiB), count=99746 (+99746), average=36 B
Traceback:
/tmp/test_tm_utils.py:2
/tmp/test_tm.py:10
^^^^^^^^^^^^^^^^^^最小代码样本
主程序in _/tmp/test_tm.py
import tracemalloc
tracemalloc.start(25)
import test_tm_utils
if __name__ == '__main__':
s1 = tracemalloc.take_snapshot()
test_tm_utils.myfun()
s2 = tracemalloc.take_snapshot()
diff = s2.compare_to(s1, 'lineno')
for entry in diff[:1]:
print('\nEntry: {}'.format(entry))
print('Traceback:')
for line in entry.traceback:
print(' {}'.format(line))和test_tm_utils.py中的内存泄漏函数
def myfun(lst=list()):
lst.append([i for i in range(100000)])发布于 2021-05-06 21:46:11
秘诀是key_type参数。必须使用值"traceback"来获取tracemalloc.start()中指定的所有行。如果使用"lineno"或"filename",则只得到一行。
所以您的代码应该如下所示:
s2 = tracemalloc.take_snapshot()
diff = s2.compare_to(s1, 'traceback') # This is the only change
for entry in diff[:1]:
print('\nEntry: {}'.format(entry))
print('Traceback:')
for line in entry.traceback:
print(' {}'.format(line))https://stackoverflow.com/questions/56935252
复制相似问题