Ich benutzte einen netten Apple Profiler, der in der System Monitor Anwendung eingebaut ist. Solange Ihr C++ - Code mit Debug-Informationen kompiliert wurde, könnten Sie Ihre laufende Anwendung testen und es würde eine eingerückte Struktur ausgeben, die Ihnen sagt, wie viel Prozent der Zeit der übergeordneten Funktion in dieser Funktion verbraucht wurde (und der Body vs. andere Funktionsaufrufe) .Wie können Sie den Aufrufbaum mit Python Profiler erhalten?
Zum Beispiel, wenn Haupt genannt function_1
und function_2
, function_2
Anrufe function_3
und dann Haupt Anrufe 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)
Ich würde das sehen und denken: „Etwas ist im Code eine lange Zeit in der Körper von function_2
. Wenn ich möchte, dass mein Programm schneller ist, dann sollte ich anfangen. "
Weiß jemand, wie ich am einfachsten diese genaue Profiling-Ausgabe für ein Python-Programm bekommen kann?
Ich habe Leute sagen gesehen, dies zu tun:
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
aber es ist ziemlich chaotisch im Vergleich zu diesem eleganten Aufrufbaum. Bitte lassen Sie mich wissen, wenn Sie dies leicht tun können, würde es ziemlich helfen.
Prost!
Wissen Sie, ob dieses Paket Zeit sowie die Anzahl der Funktionsaufrufe verstrichen tun kann? Zum Beispiel hätte ich nichts dagegen, __hash __() tausende Male aufzurufen, aber das wiederholte Aufrufen von sorted() auf großen Listen könnte ziemlich langsam sein. – user
Sie sollten beide einfach ausprobieren. Grundsätzlich machen sie das Gleiche auf unterschiedliche Weise mit unterschiedlichen Leistungen. – Falmarri
+1, das Paket ist im Einklang mit dem, was ich im Sinn hatte und war schnell und einfach zu installieren und anzurufen. Macht es Ihnen etwas aus, mir zu sagen, wie Sie die obige Zahl bekommen haben? Ich machte einen Graphen (mit pycallgraph.start_trace() und pycallgraph.make_dot_graph ('test.jpg', format = 'jpg', tool = 'neato') ), aber es ist viel zu voll und viele Funktionen sind verdeckt. – user