Как получить больше кадров из backtrace в сравнениях снимков tracemalloc (python 3.6)? - PullRequest
0 голосов
/ 08 июля 2019

Описание моего вопроса

Я пытаюсь найти утечку памяти в программе на 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)])
...