Kodprofilering för minnesanvändning

Att skriva effektiv Python-kod

Logan Thomas

Scientific Software Technical Trainer, Enthought

Snabb och enkel metod

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
Att skriva effektiv Python-kod

Kodprofilering: minne

  • Detaljerad statistik om minnesanvändning
  • Rad-för-rad-analyser
  • Paket: memory_profiler
pip install memory_profiler
  • Använder paketet memory_profiler
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Att skriva effektiv Python-kod

Kodprofilering: minne

  • Funktioner måste importeras när memory_profiler används
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Att skriva effektiv Python-kod

%mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering"

Att skriva effektiv Python-kod

%mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering, med kolumnen Line # markerad"

Att skriva effektiv Python-kod

%mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering, med kolumnen Mem usage markerad"

Att skriva effektiv Python-kod

%mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering, med kolumnen Increment markerad"

Att skriva effektiv Python-kod

%mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering, med kolumnen Line contents markerad"

Att skriva effektiv Python-kod

%mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering"

Att skriva effektiv Python-kod

Förbehåll för %mprun-utdata

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering, med mebibyte (MiB) i utdata markerat"

Att skriva effektiv Python-kod

Förbehåll för %mprun-utdata

Data i det här exemplet är ett slumpmässigt urval av 35 000 hjältar.

(inte det ursprungliga datasetet med 480 superhjältar)

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering"

Att skriva effektiv Python-kod

Förbehåll för %mprun-utdata

Små minnesallokeringar kan ge utdata av typen 0.0 MiB.

(använder det ursprungliga datasetet med 480 superhjältar)

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

alt="Tabellutdata från magikkommandot mprun med sammanfattande statistik för minnesanvändningsprofilering, där alla rader i kolumnen Increment visar 0.0 MiB"

Att skriva effektiv Python-kod

Förbehåll för %mprun-utdata

  • Undersöker minnet via frågor till operativsystemet
  • Resultaten kan variera mellan plattformar och körningar
    • Det går ändå att jämföra hur varje kodrad förhåller sig till övriga rader sett till minnesanvändning
Att skriva effektiv Python-kod

Nu kör vi en övning!

Att skriva effektiv Python-kod

Preparing Video For Download...