Раньше я использовал хороший профилировщик Apple, который встроен в приложение System Monitor. Пока ваш код C ++ был скомпилирован с отладочной информацией, вы могли бы сэмплировать ваше работающее приложение, и оно распечатало бы дерево с отступами, сообщающее вам, какой процент времени родительской функции был потрачен на эту функцию (и тело по сравнению с вызовами других функций) .
Например, если основной вызов function_1
и function_2
, function_2
вызов function_3
, а затем основной вызов 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)
Я бы увидел это и подумал: «Что-то занимает много времени в коде в теле function_2
. Если я хочу, чтобы моя программа работала быстрее, я должен начать».
Как мне проще всего получить этот точный результат профилирования для программы на Python?
Я видел, как люди говорили это:
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
Но это довольно грязно по сравнению с этим элегантным деревом вызовов. Пожалуйста, дайте мне знать, если вы можете легко это сделать, это очень поможет.