Профилирование Приложений Python

Небольшая заметка со ссылками и примерами по профилированию:

  1. производительность: горячий выстрел или профиль Python/cProfile + визуализатор журнала Ккешгринд (Есть порт для windows , аналог WinCacheGrind )
  2. использование памяти: лозоходец с веб-интерфейсом


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

  1. сбор статистики с помощью профайлера, варианты:
    • пример 1 с использованием быстрого быстрого доступа (который может стать устаревшим):
        
        
        
        
        




      import hotshot prof = hotshot.Profile("your_project.prof") prof.start() # your code goes here prof.stop() prof.close()

      конвертировать формат журнала с помощью утилиты из пакета kcachegrind-конвертеры :



      hotshot2calltree your_project.prof > your_project.out





    • пример 2, использование стандартного профиля/cProfile:



      python -m cProfile -o your_project.pyprof your_project.py

      преобразовать формат журнала, используя pyprof2calltree :



      pyprof2calltree -i your_project.pyprof -o your_project.out

      (с опцией -k сразу запустит kcachegrind и создавать промежуточный файл не нужно)




  2. открыть и изучить лог в визуализаторе Ккешгринд

    Профилирование приложений Python

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

Затем я использовал существующий обработчик для mod_python , но так как последние уже не популярны, то они появились уже давно альтернативные способы подключения и даже модули профилирования (Последний я не использовал).



Память

К сожалению, я пока не знаю, как сделать это так же просто и приятно.

Я не хотел рыться в отладчике, я был недоволен Гуппи - он сильный, но сложный - профилировать его, к счастью, приходится не так часто.

Объектный график также не обеспечивает удобную навигацию снаружи отладочные оболочки .

Мой выбор сейчас лозоходец , приложение с интерфейсом CherryPy. С ним все проще, хотя и не так гибко:

  1. создайте контроллер, по сути, приложение CherryPy 3:



    # memdebug.py import cherrypy import dowser def start(port): cherrypy.tree.mount(dowser.Root()) cherrypy.config.update({ 'environment': 'embedded', 'server.socket_port': port }) cherrypy.engine.start()



  2. подключитесь к вашему приложению:



    import memdebug memdebug.start(8080) # your code goes here



  3. заходим в браузер и смотрим статистику (не обращаем внимания на объекты CherryPy и других библиотек - ищем только нашу)



    http://localhost:8080/



    Профилирование приложений Python

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

    Нет необходимости изучать и запоминать API отладчика.

    Внимание, некоторые операции типа «Показать всё дерево» могут потребовать невероятного объёма памяти для больших приложений.



  4. Приложение не закроется само по себе.

    После изучения прервите Ctrl+Z и убейте

Какие методы и инструменты профилирования еще стоит изучить? Теги: #профилирование #отладка #python #память #производительность #профилирование #производительность #память #python
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.