Code-Profiling für die Speichernutzung

Effizienten Python-Code schreiben

Logan Thomas

Scientific Software Technical Trainer, Enthought

Schneller und einfacher Ansatz

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
Effizienten Python-Code schreiben

Code-Profiling: Speicher

  • Detaillierte Statistiken zum Speicherverbrauch
  • Zeile-für-Zeile-Analysen
  • Verwendetes Paket: memory_profiler
pip install memory_profiler
  • Mit dem Paket memory_profiler
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Effizienten Python-Code schreiben

Code-Profiling: Speicher

  • Funktionen müssen importiert werden, wenn man memory_profiler nutzt.
    • hero_funcs.py

 

from hero_funcs import convert_units
%load_ext memory_profiler

%mprun -f convert_units convert_units(heroes, hts, wts)
Effizienten Python-Code schreiben

%mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics”

Effizienten Python-Code schreiben

%mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics with Line # column highlighted”

Effizienten Python-Code schreiben

%mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics with Mem usage column highlighted”

Effizienten Python-Code schreiben

%mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics with Increment column highlighted”

Effizienten Python-Code schreiben

%mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics with Line contents column highlighted”

Effizienten Python-Code schreiben

%mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics”

Effizienten Python-Code schreiben

Zu beachten bei der %mprun-Ausgabe

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics with mebibytes (MiB) in output highlighted”

Effizienten Python-Code schreiben

Zu beachten bei der %mprun-Ausgabe

Die Daten in diesem Beispiel sind eine zufällige Auswahl von 35.000 Helden.

(nicht der ursprüngliche Datensatz mit nur 480 Superhelden)

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics”

Effizienten Python-Code schreiben

Zu beachten bei der %mprun-Ausgabe

Kleine Speicherzuweisungen können zu einer 0.0 MiB-Ausgabe führen.

(mit dem ursprünglichen Datensatz von 480 Superhelden)

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

alt=”Magic command mprun tabular output summarizing memory usage profiling statistics with all rows in Increment column showing 0.0 MiB”

Effizienten Python-Code schreiben

Zu beachten bei der %mprun-Ausgabe

  • Überprüft den Speicher, indem es das Betriebssystem abfragt.
  • Die Ergebnisse können je nach Plattform und Durchlauf unterschiedlich sein.
    • Man kann immer noch sehen, wie jede Codezeile im Vergleich zu anderen in puncto Speicherverbrauch abschneidet.
Effizienten Python-Code schreiben

Lass uns üben!

Effizienten Python-Code schreiben

Preparing Video For Download...