Подтвердить что ты не робот

В Python cProfile, в чем разница между количеством вызовов и примитивными вызовами?

Когда я просматриваю данные профилирования с помощью pstats, первый столбец - это количество вызовов для каждой функции.

Однако, когда я сортирую данные, у меня есть выбор между клавишами calls, ncalls и pcalls. Документация гласит, что calls и ncalls - счетчик вызовов, когда pcalls - это примитивный счетчик вызовов. Сортировка по calls или ncalls одинакова? Чем отличается pcalls?

4b9b3361

Ответ 1

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

Мы определяем примитив, чтобы означать, что вызов не был вызван рекурсией.

... когда функция не рекурсивно, эти два значения одинаковы

Сортировка по calls или ncalls одинакова.


Если в первом столбце есть два номера (например, 43/3), то последнее представляет собой число примитивных вызовов, а первое - это фактическое количество вызовов. Обратите внимание, что когда функция не рекурсивно, эти два значения одинаковы, и только одна цифра напечатал:

In [43]: def a(i):
   ....:     if i == 0:
   ....:         return
   ....:     a(i-1)
   ....:


In [54]: %prun a(0)
  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
       1    0.000    0.000    0.000    0.000 <ipython-input-43-25b7f3d268b8>:1(a)


In [55]: %prun a(1)
  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     2/1    0.000    0.000    0.000    0.000 <ipython-input-43-25b7f3d268b8>:1(a)


In [56]: %prun a(3)
  ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     4/1    0.000    0.000    0.000    0.000 <ipython-input-43-25b7f3d268b8>:1(a)