Codeprofiling voor geheugengebruik

Efficiënte Python-code schrijven

Logan Thomas

Scientific Software Technical Trainer, Enthought

Snelle, ruwe aanpak

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
Efficiënte Python-code schrijven

Codeprofiling: geheugen

  • Uitgebreide statistieken over geheugengebruik
  • Analyse per regel
  • Pakket: memory_profiler
pip install memory_profiler
  • memory_profiler gebruiken
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Efficiënte Python-code schrijven

Codeprofiling: geheugen

  • Functies moeten geïmporteerd zijn met memory_profiler
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Efficiënte Python-code schrijven

%mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken”

Efficiënte Python-code schrijven

%mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken, kolom Line # gemarkeerd”

Efficiënte Python-code schrijven

%mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken, kolom Mem usage gemarkeerd”

Efficiënte Python-code schrijven

%mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken, kolom Increment gemarkeerd”

Efficiënte Python-code schrijven

%mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken, kolom Line contents gemarkeerd”

Efficiënte Python-code schrijven

%mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken”

Efficiënte Python-code schrijven

Kanttekeningen bij %mprun-uitvoer

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken, mebibytes (MiB) in de uitvoer gemarkeerd”

Efficiënte Python-code schrijven

Kanttekeningen bij %mprun-uitvoer

De data in dit voorbeeld is een willekeurige steekproef van 35.000 helden.

(niet de oorspronkelijke dataset met 480 superhelden)

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken”

Efficiënte Python-code schrijven

Kanttekeningen bij %mprun-uitvoer

Kleine geheugenallocaties kunnen resulteren in 0.0 MiB in de uitvoer.

(op de oorspronkelijke dataset met 480 superhelden)

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

alt=”Magic-commando mprun: tabeluitvoer met geheugenprofileringsstatistieken waarbij alle rijen in de kolom Increment 0.0 MiB tonen”

Efficiënte Python-code schrijven

Kanttekeningen bij %mprun-uitvoer

  • Inspecteert geheugen via het besturingssysteem
  • Resultaten kunnen per platform en run verschillen
    • Je kunt nog steeds regels onderling vergelijken op geheugengebruik
Efficiënte Python-code schrijven

Laten we oefenen!

Efficiënte Python-code schrijven

Preparing Video For Download...