Użyłem kiedyś ładnego profilera Apple, który jest wbudowany w aplikację Monitora systemu. Dopóki twój kod C++ został skompilowany z informacjami debugowania, możesz wypróbować działającą aplikację i wydrukować drzewo z wcięciem informujące o tym, ile procent czasu funkcji nadrzędnej zostało zużytych w tej funkcji (i ciało w porównaniu z innymi wywołaniami funkcji) .Jak uzyskać drzewo wywołań z profilerami Pythona?
Na przykład, jeśli główny zwany function_1
i function_2
, function_2
rozmowy function_3
, a następnie główne rozmowy function_3
:
main (100%, 1% in function body):
function_1 (9%, 9% in function body):
function_2 (90%, 85% in function body):
function_3 (100%, 100% in function body)
function_3 (1%, 1% in function body)
chciałbym to zobaczyć i pomyśleć: „Coś trwa długo w kodzie w body of function_2
. Jeśli chcę, aby mój program był szybszy, to tam powinienem zacząć. "
Czy ktoś wie, jak mogę najłatwiej uzyskać dokładne wyniki profilowania dla programu Pythona?
Widziałem ludzi powiedzieć, aby to zrobić:
import cProfile, pstats
prof = cProfile.Profile()
prof = prof.runctx("real_main(argv)", globals(), locals())
stats = pstats.Stats(prof)
stats.sort_stats("time") # Or cumulative
stats.print_stats(80) # 80 = how many to print
ale to dość niechlujny w porównaniu do tego eleganckiego drzewa połączeń. Daj mi znać, jeśli możesz to łatwo zrobić, to trochę pomogłoby.
Pozdrawiam!
Wiesz, jeśli ten pakiet może nie upłynął czas, jak również liczbę wywołań funkcji? Na przykład, nie miałbym nic przeciwko wywołaniu __hash __() tysięcy razy, ale wywoływanie sorted() wielokrotnie na dużych listach może być dość powolne. – user
Powinieneś po prostu wypróbować je na obu. Zasadniczo robią to samo na różne sposoby z różnymi wyjściami. – Falmarri
+1, pakiet jest zgodny z tym, co miałem na myśli i był szybki i łatwy w instalacji i wywołaniu. Czy możesz powiedzieć mi, jak masz powyższą figurę? Zrobiłem wykres (używając pycallgraph.start_trace() i pycallgraph.make_dot_graph ("test.jpg", format = 'jpg', tool = 'neato') ), ale jest zbyt tłoczno i wiele funkcji jest zasłoniętych. – user