Как мне прочитать вывод команды IPython% prun (profiler)? - PullRequest
29 голосов
/ 15 августа 2011

Я запускаю это:

In [303]: %prun my_function()
         384707 function calls (378009 primitive calls) in 83.116 CPU seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
    37706   41.693    0.001   41.693    0.001 {max}
    20039   36.000    0.002   36.000    0.002 {min}
    18835    1.848    0.000    2.208    0.000 helper.py:119(fftfreq)

- snip -

Что делает каждый из totaltime, percall, cumtime?ncalls довольно очевидно (сколько раз вызывается функция).Моя догадка состоит в том, что общее время - это общее время, потраченное на функцию, исключая время, потраченное на вызовы ее собственной функции;Percall является ???cumtime - это общее время, потраченное на вызов функции, включая время, потраченное на вызовы собственной функции (но, конечно, без учета двойного счета). документы не слишком полезны;Поиск Google тоже не помогает.

1 Ответ

31 голосов
/ 16 августа 2011

Это просто удобная оболочка для собственного профилировщика Python, документация для которой здесь:

http://docs.python.org/library/profile.html#module-pstats

Цитата:

ncalls для количества вызовов,

tottime для общего времени, потраченного на данную функцию (и исключая время, проведенное в вызовах подфункций),

percall - это коэффициент общего времени, деленный на ncalls

cumtime - общее время, потраченное в этой и всех подфункциях (от вызова до выхода).Эта цифра точна даже для рекурсивных функций.

percall - это коэффициент cumtime, деленный на примитивные вызовы

...