11

Я пишу веб-приложение на Python, я не решил, хочу ли я использовать Flask, web.py или еще что-нибудь еще, и я хочу иметь возможность делать профиль на живом заявление.Измерение производительности в Python

Кажется, что очень мало информации о том, как вы идете о внедрении инструментария для измерения производительности, а не во многих случаях печатать datetime.now() повсюду.

Каков наилучший способ использования приложения Python для обеспечения хороших измерений. Наверное, я ищу что-то похожее на команды mcc-mini-profiler для команд Stackoverflow.

+3

http://docs.python.org/library/profile.html – geoffspear

+0

Мне не очень нравится, что профилирование отдельных функций выполнялось так, как предлагает стандартный профиль. Это кажется полезным, если вы ожидаете, что приложение прекратится в какой-то момент. Я вижу, как это можно сделать элегантно с декораторами, поэтому, возможно, стоит задуматься о написании теста. – Simon

ответ

6

Вы можете просто запустить Cprofile инструмент, который поставляется с Python:

python -m cProfile script.py 

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

Или вы Каус использование:

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

профилировать его от foo точки входа.

+0

Мне бы очень хотелось иметь код профайлера в функции, а не «обернуть» функцию в профилировщике. Кроме того, не затрудняет ли перепрофилирование и части для приложений? – Simon

+0

Оказывается, несмотря на мое нежелание использовать стандартный профилировщик, это правильный ответ, но с небольшой модификацией. Кто-то написал это: http://mg.pov.lt/profilehooks/, который позволяет добавить декоратор к функциям, которые вы хотите профилировать. Это не идеально, поскольку он не может собрать все, что делает профилировщик stackoverflow mvc, но я думаю, что это цена того, что у вас есть нечто более общее. – Simon

+0

Спасибо за комментарий, я не знал про профайлы. Cheers – rafalotufo

4

Amir Salihefendic написал короткую (150 LOC) RequestProfiler, который описан в этом блоге:

Я не пробовал, но так как это WSGI промежуточного слоя , он должен быть несколько подключаемым.

+0

Выглядит интересным, немного ограниченным, возможно, и я не совсем понимаю, как ему удается отслеживать запросы к базе данных и memcache, но это выглядит как быстрый способ поиска узких мест. – Simon

+0

Я сам не смотрел на источник - я доверяю автору;) Тем не менее, я надеюсь, что на этот вопрос появятся другие ответы, так как я сам заинтересован в этой теме (возможно, заголовок вопроса может быть немного более сфокусированным, например, WSGI профилирование). – miku

+0

Это не предназначалось для профилирования WSGI. Я на самом деле не забочусь о решении, которое является только WSGI, я не смогу использовать те же инструменты для веб-приложений и обычных приложений. – Simon

0

Вы можете просто использовать инструмент для повышения производительности веб-приложений общего назначения, например httpperf. Это работает с использованием внешнего клиента и работает с любой средой, поскольку работает со стандартным интерфейсом (HTTP). Поэтому он проверяет полную производительность стека.

+0

Но это не скажет мне, где потрачено время, просто так, что данный HTTP-запрос медленный. – Simon

+0

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

+0

Возможно, это была моя ошибка говорить о работе веб-фрейма, это означало, что «я хочу что-то, что поддерживает любые рамки». Я не хочу использовать стандартный профилировщик Python, потому что это не похоже на то, что вы хотели бы постоянно запускать в производственной системе, но больше того, что вы используете для измерения производительности перед развертыванием. – Simon

0

Использовать бесплатную систему мониторинга New Relic. Вы просто устанавливаете агента на сервере и указываете на свою флягу init .py файл. После запуска приложения с надлежащей настройкой агента вы начнете видеть показатели приложений в онлайн-панели New Relic под названием APM. По умолчанию он покажет вам графики пропускной способности вашего приложения (QPS/RPM), время отклика приложения, верхние транзакции, частоту ошибок, трассировку стека ошибок, если таковые имеются (например, для ошибки 500), вызовы внешних служб и т. Д. Кроме того, вы можете также отслеживайте статистику своей системы.

Смежные вопросы