Профилировщик Python не дает достаточно информации - PullRequest
2 голосов
/ 24 февраля 2011

Я пытаюсь выяснить, почему выполнение некоторой функции занимает много времени.
Я использую профилировщик так:

ipdb> import profile
ipdb> profile.runctx('report.generateOutput()', globals(), locals())
         1 function calls in 40.783 CPU seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        0    0.000             0.000          profile:0(profiler)
        1   40.783   40.783   40.783   40.783 profile:0(report.generateOutput())

Как видите, это не очень полезно.
Мне нужна какая-то подробная информация о том, где все время тратится, чего мне здесь не хватает?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Профиль report.generateOutput () вместо вызова функции.

Чтобы профилировать приложение с главной точкой входа foo (), вы должны добавить в свой модуль следующее:

import cProfile
cProfile.run('foo()')

Может быть Документы Python по профилированию полезны.

0 голосов
/ 24 февраля 2011

Вы говорите две разные вещи:

  • «Мне нужна некоторая подробная информация о , где все время тратится»

  • «Я пытаюсь выяснить , почему выполнение какой-либо функции занимает много времени»

Понимаете, это не одно и то же. Я думаю, что лучше спросить почему , чем , где , потому что , где на самом деле очень размыто.

Например, предположим, что существует "узкое место", состоящее из пузырькового типа большого массива строк. Где время проведено? Это во внутреннем цикле сортировки пузырьков или в строке сравнения? Профилировщики сказали бы последнее, но причина, по которой это происходит, и фактическая проблема, заключается в увеличении стека вызовов.

Вот пример того, как я это делаю.

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