Профілювання коду за використанням пам'яті

Ефективне написання коду 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="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання використання пам'яті"

Ефективне написання коду Python

Вивід %mprun

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання пам'яті з підсвіченим стовпцем Line #"

Ефективне написання коду Python

Вивід %mprun

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання пам'яті з підсвіченим стовпцем Mem usage"

Ефективне написання коду Python

Вивід %mprun

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання пам'яті з підсвіченим стовпцем Increment"

Ефективне написання коду Python

Вивід %mprun

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання пам'яті з підсвіченим стовпцем Line contents"

Ефективне написання коду Python

Вивід %mprun

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання використання пам'яті"

Ефективне написання коду Python

Застереження щодо виводу %mprun

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання пам'яті з підсвіченим позначенням мебібайтів (MiB) у виводі"

Ефективне написання коду Python

Застереження щодо виводу %mprun

Дані в цьому прикладі — випадкова вибірка з 35 000 героїв.

(не початковий набір із 480 супергероїв)

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання використання пам'яті"

Ефективне написання коду Python

Застереження щодо виводу %mprun

Малі виділення пам'яті можуть дати вивід 0.0 MiB.

(використано початковий набір із 480 супергероїв)

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

alt="Вихідна таблиця magic-команди mprun з підсумком статистики профілювання пам'яті, де в усіх рядках стовпця Increment показано 0.0 MiB"

Ефективне написання коду Python

Застереження щодо виводу %mprun

  • Перевіряє пам'ять, звертаючись до операційної системи
  • Результати можуть відрізнятися між платформами та запусками
    • Проте можна бачити, як кожен рядок коду співвідноситься з іншими за споживанням пам'яті
Ефективне написання коду Python

Давайте потренуємось!

Ефективне написання коду Python

Preparing Video For Download...