Профиль памяти выделил имя класса и стек вызовов в Python3 - PullRequest
0 голосов
/ 19 января 2020

Я хочу рассчитать потребление памяти приложением в модульном тесте в python3. Я попытался использовать модуль tracemallo c в простом модульном тесте, чтобы получить необходимую информацию. Но я не знаю, как получить имя класса, например memory_profile.test_memory_profile.TstClass данного объекта. Кто-нибудь может помочь, как получить имя класса объекта из снимка? У кого-нибудь есть другое решение?

class TstClass(object):
    def __init__(self):
        self.value = 100

class TestMemUsage(unittest.TestCase):
    def test_tracemalloc_single_object(self):
        tracemalloc.start(5)
        snapshot1 = tracemalloc.take_snapshot()

        obj = TstClass()

        snapshot2 = tracemalloc.take_snapshot()
        stats = snapshot2.compare_to(snapshot1, 'lineno')

        stat = stats[2] # Allocation of ExampleClass()
        print(stat)
        for line in stat.traceback.format(): # Traceback
            print(line)

        file_path, line_nr = stat.traceback._frames[0]
        print('obj={}'.format(obj))
        print('file_path={}'.format(file_path))
        print('line_nr={}'.format(line_nr))
        print('size_diff={}'.format(stat.size_diff))
        print('count_diff={}'.format(stat.count_diff))
        # How to get the class name of the object here ?
        # e.g. memory_profile.test_memory_profile.TstClass

Вывод теста:

D:\Projekte\python\python_examples\memory_profile\test_stack_overflow.py:18: size=356 B (+356 B), count=2 (+2), average=178 B
  File "D:\Projekte\python\python_examples\memory_profile\test_stack_overflow.py", line 18
    obj = TstClass()
obj=<memory_profile.test_stack_overflow.TstClass object at 0x03F38A18>
file_path=D:\Projekte\python\python_examples\memory_profile\test_stack_overflow.py
line_nr=18
size_diff=356
count_diff=2
...