Измерение различных аспектов кода - PullRequest
0 голосов
/ 07 октября 2011

Существует ли инструмент, который может измерять частоту вызовов функций в проекте и учитывает другие аспекты (для статистических целей) кода Python?

спасибо

Ответы [ 3 ]

2 голосов
/ 07 октября 2011

Профилировщик Python должен предоставить вам совсем немного информации:

python -m cProfile -o fooprof myscript.py

Вы загружаете результаты, используя простой скрипт:

#!/usr/bin/env python
import pstats
p = pstats.Stats('fooprof')
p.strip_dirs().sort_stats(-1).print_stats()

В качестве альтернативы, если вы не укажете-o fooprof результаты выводятся на стандартный вывод.

См. Документацию по http://docs.python.org/library/profile.html

Я не уверен, какие "другие аспекты" вы хотите посчитать, но это определит, как много раз вызывается функция.Если вас интересует «частота» вызовов, то вы можете найти среднюю частоту как функцию общего времени выполнения и количества вызовов функции.Например:

Предположим, что foo() был вызван 100 раз за 10 секунд.Средняя частота вызовов составляет 10 / секунду.

1 голос
/ 15 октября 2011

Полагаю, вы хотите провести статический анализ кода.Сколько местоположений в вашем коде вызывают функцию.

Это очень трудно сделать в динамических языках, таких как python, потому что существует множество способов вызова функций иначе, чем по собственному имени,и даже компилятор байт-кода python не всегда будет знать, какая функция будет вызываться в каком-либо месте, и он может даже измениться во время выполнения.И есть также стандартный ОО-полиморфизм.

Учтите:

def doublefx(f, x):
    return f(x)*2

print doublefx(math.sqrt, 9)  # 6 

f = stdin.readline()
print doublefx(getattr(math, f), 9)  # ?

Ни при каких условиях инструмент статического анализа не будет выяснять, какие функции в математике. * Будут вызываться этим кодом.Даже первый пример будет очень трудно рассуждать, второй - невозможен.

Следующий инструмент выполняет некоторый статический анализ сложности.

Другие инструменты анализа, такие как PyLint и PyChecker, скорее фокусируются на стиле и возможных ошибках.

0 голосов
/ 07 октября 2011

Я никогда не использовал его, но похоже, что cProfile может быть хорошим местом для начала. (Обратите внимание, что из трех профилировщиков, упомянутых на этой странице, один (горячий) является экспериментальным и не очень хорошо поддерживается, один (профиль) «добавляет значительные накладные расходы к профилированным программам», а последний - cProfile, так что, вероятно, согласитесь с этим.) Ссылки на исходный код для profile.py и pstats.py приведены в верхней части страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...