Анализатор производительности

1

Было около 8-9 лет назад я увидел инструмент для Visual Studio (я действительно не помню имя), который может визуализировать вызовы функций и их производительность. Мне очень понравилось, поэтому мне было интересно, есть ли что-то подобное в Python. Скажем, у вас есть три функции:

def first_func():
    ...

def second_func():
    ...
    for i in xrange(10):
        first_function()
    ...

def third_func():
    ...
    for i in xrange(5):
        second_function()
    ...

Итак, окончательный отчет этого инструмента был примерно таким (включая диаграммы соединений):

first_func[avg 2ms] <--50 times--< second_func[avg 25ms] <--5 times--< third_func[avg 140ms]

Такой инструмент облегчит поиск узких мест в системе. Особенно для больших систем.

  • 1
    закодируй это! Я бы использовал это!
  • 0
    @eat_a_lemon :)) Если я не могу найти что-то подобное, я постараюсь реализовать самостоятельно. Прежде чем начать работать над этим, я просто хотел проверить, есть ли что-нибудь близкое к этому.
Теги:
performance
profiling

3 ответа

3
Лучший ответ

Вы можете использовать профилировщик в комплекте с установкой python. Ссылка на профайлер Python

  • 0
    Мог и должен.
  • 0
    Да, это полезно, но в его отчете не содержится никакой информации о связях функций, вам нужно выяснить это самостоятельно.
Показать ещё 1 комментарий
2

Пошаговое время и частота выполнения с профилировщиком:

Сначала установите line_profiler

Во-вторых, измените исходный код, украсив функцию, которую вы хотите измерить, с помощью декоратора @profile.

В-третьих, kernprof -l -v yourscript.py

Опция -l сообщает kernprof вставлять декоратор @profile в ваши встроенные функции script, а -v сообщает kernprof отображать информацию о времени, как только вы закончите script.

выход:

Изображение 174551

1

Общепринято думать, что вам нужно знать, сколько раз вы называете вещи, сколько времени они берут (self vs. inclusive), а кто - звонит - кто сколько времени. Тогда вы можете надеть свою детективную кепку и, надеюсь, раскрыть, где проблема.

Существует еще один подход, который заключается в том, чтобы спросить не о функциях, а о строках кода, каков процент времени настенных часов в стеке. Причина в том, что если такую ​​строку кода можно было бы сделать, чтобы не тратить время, избегая ее или удаляя ее или выполняя ее работу по-другому, этот процент может быть сохранен. Вам не обязательно быть детективом, чтобы точно определить это. Любое узкое место в вашем коде должно появляться в виде такой строки, и точные проценты не важны. Вот пример.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню