Profilowanie kodu pod kątem pamięci

Wydajny kod w Pythonie

Logan Thomas

Scientific Software Technical Trainer, Enthought

Szybkie i proste podejście

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
Wydajny kod w Pythonie

Profilowanie kodu: pamięć

  • Szczegółowe statystyki zużycia pamięci
  • Analiza linia po linii
  • Używany pakiet: memory_profiler
pip install memory_profiler
  • Użycie pakietu memory_profiler
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Wydajny kod w Pythonie

Profilowanie kodu: pamięć

  • Funkcje muszą być zaimportowane podczas używania memory_profiler
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Wydajny kod w Pythonie

Wynik %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci"

Wydajny kod w Pythonie

Wynik %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci z wyróżnioną kolumną Line #"

Wydajny kod w Pythonie

Wynik %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci z wyróżnioną kolumną Mem usage"

Wydajny kod w Pythonie

Wynik %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci z wyróżnioną kolumną Increment"

Wydajny kod w Pythonie

Wynik %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci z wyróżnioną kolumną Line contents"

Wydajny kod w Pythonie

Wynik %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci"

Wydajny kod w Pythonie

Zastrzeżenia dotyczące wyniku %mprun

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci z wyróżnionymi mebibajatami (MiB) w wyniku"

Wydajny kod w Pythonie

Zastrzeżenia dotyczące wyniku %mprun

Dane użyte w tym przykładzie to losowa próbka 35 000 bohaterów.

(nie oryginalny zbiór 480 superbohaterów)

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci"

Wydajny kod w Pythonie

Zastrzeżenia dotyczące wyniku %mprun

Małe alokacje pamięci mogą dawać wynik 0.0 MiB.

(oryginalny zbiór 480 superbohaterów)

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

alt="Tabelaryczny wynik polecenia magicznego mprun z podsumowaniem statystyk profilowania pamięci, gdzie wszystkie wiersze w kolumnie Increment pokazują 0.0 MiB"

Wydajny kod w Pythonie

Zastrzeżenia dotyczące wyniku %mprun

  • Sprawdza pamięć, odpytując system operacyjny
  • Wyniki mogą się różnić w zależności od platformy i uruchomienia
    • Można jednak porównywać zużycie pamięci między poszczególnymi liniami kodu
Wydajny kod w Pythonie

Czas na ćwiczenia!

Wydajny kod w Pythonie

Preparing Video For Download...