cProfile и Python: поиск номера строки, на которую код тратит больше всего времени - PullRequest
5 голосов
/ 01 октября 2009

Я использую cProfile, pstats и Gprof2dot для профилирования довольно длинного скрипта Python.

Результаты показывают, что больше всего времени уходит на вызов метода в объекте, который я определил. Однако, что мне действительно хотелось бы, так это точно знать, какой номер строки в этой функции тратит время.

Есть идеи, как получить эту дополнительную информацию?

(Кстати, я использую Python 2.6 на OSX Snow Leopard, если это поможет ...)

Ответы [ 3 ]

3 голосов
/ 01 октября 2009

В питоне есть строчный профилировщик , написанный Робертом Керном.

2 голосов
/ 01 октября 2009

cProfile не отслеживает номера строк внутри функции; он только отслеживает номер строки, где была определена функция.

cProfile пытается продублировать поведение profile (это чистый Python). profile использует pstats для хранения данных о работе, а pstats хранит только номера строк для определений функций, а не для отдельных операторов Python.

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

2 голосов
/ 01 октября 2009

Предположим, количество времени, которое "съедается" - это какое-то число, например, 40%. Затем, если вы просто прервете программу или сделаете паузу в случайное время, вероятность того, что вы ее увидите, составляет 40%, точно выставленной в стеке вызовов. Сделайте это 10 раз, и на 4 сэмплах +/- вы увидите это.

Это говорит о том, почему это работает. Это пример.

...