2013-09-30 11 views
18

Mam proste zadanie: oprócz pomiaru czasu potrzebnego do wykonania fragmentu kodu w Pythonie, muszę zmierzyć ilość pamięci danego fragmentu potrzeb kodu.Miara (maks.) Użycia pamięci z czasem podobnym do IPythona, ale memem

ipython ma ładny narzędzie o nazwie timeit który działa tak:

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

Co szukam jest coś takiego:

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

Jestem świadomy, że to chyba nie robi wbudowane w IPython - ale podoba mi się analogia: timeit - memit.

+1

Spójrz, dzięki; rozwiązanie tam wygląda dość prosto. I dobry punkt o "najlepszym" - ale timeit daje ci to, co najlepsze, i możesz powiedzieć, że naprawdę (czasami) interesujesz się najgorszym czasem. Re. Magia IPython: Znalazłem http://blog.vene.ro/2012/06/30/quick-memory-usage-benchmarking-in-ipython/ –

+0

Pytanie, które zostało oznaczone jako duplikat, dotyczy pamięci profilery w Pythonie - ten pyta o IPython; więc nie widzę, jak to jest naprawdę duplikatem ... W drugim pytaniu nie ma wzmianki o 'timeit',' memit' lub nawet o "ipython". –

Odpowiedz

25

W rzeczywistości, to już istnieje, jako część prozaicznie nazwie memory_profiler opakowania:

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

Więcej informacji na https://github.com/fabianp/memory_profiler#ipython-integration

EDIT: Aby to wykorzystać, trzeba najpierw załadować go jako ipython rozszerzenie:

%load_ext memory_profiler 

aby ipython zawsze załadować rozszerzenie memory_profiler podczas uruchamiania, dodaj go do c.InteractiveShellApp.extensions lista w twoim profilu: ipython_config.py:

+1

po wykonaniu 'pip install memory_profiler',' W [2]:% memit 3' daje mi 'ERROR: Line magic function'% memit' not found'. –

+0

może autor odpowiedzi miał na myśli coś takiego jak "import memory_profiler jako memit" – erjoalgo

+1

Istnieje specjalne polecenie IPython do załadowania rozszerzenia. Dodałem go do odpowiedzi. –