Który Profiler pamięci Pythona jest zalecany? [zamknięte]
Chcę poznać wykorzystanie pamięci w mojej aplikacji Pythona, a konkretnie chcę wiedzieć, jakie bloki/części kodu lub obiekty zużywają najwięcej pamięci. Wyszukiwarka Google pokazuje, że komercyjny to walidator pamięci Pythona (Tylko Windows).
I open source to PySizer i Heopy .
Nie próbowałem nikogo, więc chciałem wiedzieć, który z nich jest najlepszy:
Podaje najwięcej szczegółów.
Muszę to zrobić. najmniej lub bez zmian w moim kodzie.
8 answers
Heopy jest dość prosty w użyciu. W pewnym momencie w kodzie musisz napisać:
from guppy import hpy
h = hpy()
print h.heap()
To daje jakieś wyjście w ten sposób:
Partition of a set of 132527 objects. Total size = 8301532 bytes.
Index Count % Size % Cumulative % Kind (class / dict of class)
0 35144 27 2140412 26 2140412 26 str
1 38397 29 1309020 16 3449432 42 tuple
2 530 0 739856 9 4189288 50 dict (no owner)
Możesz również dowiedzieć się, z którego miejsca odwołują się obiekty i uzyskać statystyki na ten temat, ale jakoś dokumenty na ten temat są trochę rzadkie.
Istnieje również graficzna przeglądarka, napisana w Tk.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-22 19:51:07
Ponieważ nikt o tym nie wspomniał, wskażę mój Moduł memory_profiler , który jest w stanie drukować wiersz po wierszu raport zużycia pamięci i działa na Unixie i Windows (potrzebuje psutil na tym ostatnim). Dane wyjściowe nie są zbyt szczegółowe, ale celem jest pokazanie, gdzie kod zużywa więcej pamięci, a nie wyczerpująca analiza przydzielonych obiektów.
Po zdobieniu funkcji @profile
i uruchomieniu kodu z flagą -m memory_profiler
wydrukuje raport liniowy w ten sposób:
Line # Mem usage Increment Line Contents
==============================================
3 @profile
4 5.97 MB 0.00 MB def my_func():
5 13.61 MB 7.64 MB a = [1] * (10 ** 6)
6 166.20 MB 152.59 MB b = [2] * (2 * 10 ** 7)
7 13.61 MB -152.59 MB del b
8 13.61 MB 0.00 MB return a
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-30 14:37:42
Polecam Dowser. Jest bardzo łatwy w konfiguracji i nie potrzebujesz żadnych zmian w kodzie. Możesz przeglądać liczbę obiektów każdego typu w czasie, wyświetlać listę aktywnych obiektów, wyświetlać odniesienia do aktywnych obiektów, wszystko z prostego interfejsu internetowego.
# memdebug.py
import cherrypy
import dowser
def start(port):
cherrypy.tree.mount(dowser.Root())
cherrypy.config.update({
'environment': 'embedded',
'server.socket_port': port
})
cherrypy.server.quickstart()
cherrypy.engine.start(blocking=False)
Importujesz memdebug i wywołujesz memdebug.zaczynaj. To wszystko.
Nie próbowałem PySizer ani Heopy. Byłbym wdzięczny za opinie innych.UPDATE
Powyższy kod jest dla CherryPy 2.X
, CherryPy 3.X
na server.quickstart
metoda została usunięta i engine.start
nie przyjmuje znacznika blocking
. Więc jeśli używasz CherryPy 3.X
# memdebug.py
import cherrypy
import dowser
def start(port):
cherrypy.tree.mount(dowser.Root())
cherrypy.config.update({
'environment': 'embedded',
'server.socket_port': port
})
cherrypy.engine.start()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-13 09:16:05
Rozważmy bibliotekę objgraph (Zobacz http://www.lshift.net/blog/2008/11/14/tracing-python-memory-leaks dla przykładowego przypadku użycia).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 19:41:40
Muppy to (kolejny) Profiler użycia pamięci dla Pythona. Ten zestaw narzędzi skupia się na identyfikacji wycieków pamięci.
Muppy stara się pomóc programistom w identyfikacji wycieków pamięci aplikacji Pythona. Umożliwia śledzenie wykorzystania pamięci w czasie wykonywania i identyfikację obiektów, które są nieszczelne. Dodatkowo dostępne są narzędzia, które pozwalają zlokalizować źródło nie zwalnianych obiektów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-11 14:17:42
Znalazłem meliae jest znacznie bardziej funkcjonalny niż Heopy lub PySizer. Jeśli zdarzy ci się uruchomić wsgi webapp, to Dozer jest ładnym opakowaniem Middleware z Dowser
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-25 21:31:15
Rozwijam Profiler pamięci dla Pythona o nazwie memprof:
Http://jmdana.github.io/memprof/
Pozwala na rejestrowanie i rysowanie wykorzystania pamięci zmiennych podczas wykonywania dekorowanych metod. Wystarczy zaimportować bibliotekę używając:
from memprof import memprof
I udekoruj swoją metodę używając:
@memprof
To jest przykład jak wyglądają działki:
Projekt jest hostowany w GitHub:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-03 12:12:50
Wypróbuj również projekt pytracemalloc , który zapewnia zużycie pamięci na numer linii Pythona.
EDIT (2014/04): teraz ma Qt GUI do analizy migawek.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-03 14:49:24