Описание моего вопроса
Я пытаюсь найти утечку памяти в программе на python 3.6.
Для этого я тестирую tracemalloc, которая позволяет мне сравнивать снимки памяти и выводить «обратную трассировку».
Максимальное количество кадров в обратной трассировке должно быть установлено в качестве первого аргумента на tracemalloc.start()
, в соответствии с документами .
Однако в моей минимальной тестовой настройке (код ниже) я запускаю tracemalloc с аргументом 25, но я получаю только 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
^^^^^^^^^^^^^^^^^^
Пример минимального кода
Основная программа в _ / 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)])