2013-09-30 6 views
18

Ich habe eine einfache Aufgabe: Neben der Zeit messen, die es dauert, um ein Stück Code in Python auszuführen, muss ich die Menge an Speicher einen bestimmten Chunk messen Code benötigt.Messen (max) Speicherverbrauch mit IPython-wie Zeit, aber Memit

IPython hat ein schönes Programm namens timeit, die wie folgt funktioniert:

In [10]: timeit 3 + 3 
10000000 loops, best of 3: 24 ns per loop 

Was ich suche so etwas wie dieses:

In [10]: memit 3 + 3 
10000000 loops, best of 3: 303 bytes per loop 

mir bewusst bin, dass dies tut wahrscheinlich nicht kommen mit IPython eingebaut - aber ich mag die timeit - memit Analogie.

+1

ich einen Blick darauf werfen werde, dank; Die Lösung sieht da ganz einfach aus. Und ein guter Punkt über "das Beste" - aber die Zeit gibt Ihnen auch das Beste, und Sie könnten sagen, dass Sie wirklich (manchmal) an der schlimmsten Zeit interessiert sind. Re. IPython Magie: Ich habe gefunden http://blog.vene.ro/2012/06/30/quick-memory-usage-benchmarking-in-ipython/ –

+0

Die Frage, dass diese Frage als Duplikat markiert wurde, ist über Speicher Profiler in Python im Allgemeinen - hier fragt man nach IPython; also sehe ich nicht, wie es wirklich ein Duplikat ist ... Die andere Frage hat keine Erwähnung von "Zeit", "Memit" oder sogar "Ipython". –

Antwort

25

In der Tat, es ist bereits vorhanden, als Teil des prosaisch namens memory_profiler Paket:

In [2]: %memit np.zeros(1e7) 
maximum of 3: 76.402344 MB per loop 

Mehr Infos unter https://github.com/fabianp/memory_profiler#ipython-integration

Edit: Um dies zu nutzen, müssen Sie zuerst es als IPython zu laden Erweiterung:

%load_ext memory_profiler 

um IPython immer beim Start der memory_profiler Erweiterung laden, fügen sie die c.InteractiveShellApp.extensions Liste in Ihrem Profil der ipython_config.py:

$ grep -C2 c.InteractiveShellApp.extensions ~/.ipython/profile_default/ipython_config.py 
# A list of dotted module names of IPython extensions to load. 
# 
c.InteractiveShellApp.extensions = [ 
    'autoreload', 
    'memory_profiler', 
+1

nachdem 'pip install memory_profiler' gemacht wurde, 'In [2]:% memit 3' gibt mir' ERROR: Line magische Funktion '% memit' not found'. –

+0

vielleicht meinte der Autor der Antwort so etwas wie 'import memory_profiler als memit' – erjoalgo

+1

Es gibt einen IPython spezifischen Befehl um eine Erweiterung zu laden. Ich habe es der Antwort hinzugefügt. –