Профилирование кода по использованию памяти

Эффективный код на Python

Logan Thomas

Scientific Software Technical Trainer, Enthought

Быстрый и простой способ

import sys
nums_list = [*range(1000)]
sys.getsizeof(nums_list)
9112
import numpy as np

nums_np = np.array(range(1000))
sys.getsizeof(nums_np)
8096
Эффективный код на Python

Профилирование кода: память

  • Подробная статистика потребления памяти
  • Построчный анализ
  • Используемый пакет: memory_profiler
pip install memory_profiler
  • Использование пакета memory_profiler
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Эффективный код на Python

Профилирование кода: память

  • При использовании memory_profiler функции необходимо импортировать
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Эффективный код на Python

Вывод %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти"

Эффективный код на Python

Вывод %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти — выделен столбец Line #"

Эффективный код на Python

Вывод %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти — выделен столбец Mem usage"

Эффективный код на Python

Вывод %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти — выделен столбец Increment"

Эффективный код на Python

Вывод %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти — выделен столбец Line contents"

Эффективный код на Python

Вывод %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти"

Эффективный код на Python

Особенности вывода %mprun

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти — выделены мебибайты (MiB) в выводе"

Эффективный код на Python

Особенности вывода %mprun

Данные в этом примере — случайная выборка из 35 000 героев.

(не оригинальный набор данных из 480 супергероев)

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти"

Эффективный код на Python

Особенности вывода %mprun

Малые выделения памяти могут давать результат 0.0 MiB.

(оригинальный набор данных из 480 супергероев)

%mprun -f convert_units convert_units(heroes, hts, wts)

alt="Табличный вывод магической команды mprun с результатами профилирования использования памяти — все строки столбца Increment показывают 0.0 MiB"

Эффективный код на Python

Особенности вывода %mprun

  • Анализирует память через запросы к операционной системе
  • Результаты могут различаться на разных платформах и между запусками
    • Тем не менее можно сравнивать строки кода по объёму потребляемой памяти
Эффективный код на Python

Давайте потренируемся!

Эффективный код на Python

Preparing Video For Download...