Раньше я использовал хороший профилировщик Apple, встроенный в приложение System Monitor. Пока ваш код на С++ был скомпилирован с информацией об отладке, вы можете опробовать свое запущенное приложение и распечатать дерево с отступом, сообщающее вам, какой процент от времени функции родителя был потрачен на эту функцию (и тело против других вызовов функций).
Например, если main с именем 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
но он довольно грязный по сравнению с этим элегантным деревом звонков. Пожалуйста, дайте мне знать, если вы можете легко это сделать, это поможет немного.
Ура!