LINUX.ORG.RU

Сборка статистики выполнения частей кода в Python

 


2

3

Добрый день, Лоровцы.

Недавно задался вопросом - а как можно собирать время выполнения определённых функций в Python? На ум приходят Graphite, statd, и прочее, но хотелось бы услышать ответ знающих. И если такая фича в мире Пайтона есть, то возможно ли это делать с помощью декораторов?

Ответ на: комментарий от true_admin

Нет, не смотрел, спасибо. :)

Ещё немного хотел бы расширить свой вопрос - есть ли такой набор программ(модули, демон), модуль которой я бы мог импортировать в свою программу, поставить перед функцией декоратор, и всё отобразилось где-нибудь в графиках? Читал про Graphite, grafana, statsd, вроде вполне неплохо смотрится. Но не совсем понятно как можно было бы использовать всё это при сборе времени выполнения. В общем, пока летаю без конкретики. :)

mahalaka ★★
() автор топика
Ответ на: комментарий от pawnhearts

Выглядит интересно, спасибо. Но это не совсем то, что я хотел. Выше я описал, что хотел бы получить. Нечто вроде - декоратор для функции, который берёт имя функции, время её выполнения, отправляет в некий демон, а демон рисует графики. Что-то вроде того. :)

mahalaka ★★
() автор топика

Вроде в PyCharm профайлер запилили недавно.
Протестируй и напиши обзоную статью, я почитаю

zolden ★★★★★
()

https://pypi.python.org/pypi/statsd

Нашёл довольно простой модуль, который, как я понимаю, коннектится к statsd и graphite, и отдаёт им инфу. В принципе можно с помощью него написать декоратор, и в путь.

Но хотелось бы ещё послушать знающих. :)

mahalaka ★★
() автор топика
Ответ на: комментарий от zolden

Мне нужно смотреть на время выполнения приложения, на каких моментах оно работает медленно. Приложение работает 24*7, в режиме демона, и статистику нужно собирать постоянно, поэтому pycharm не подходит однозначно. :)

mahalaka ★★
() автор топика
Ответ на: комментарий от mahalaka

То что ты хочешь, называется профилирование. Его принято делать ДО ввода кода в эксплуатацию. Представляешь, сколько машинного времени отъедает профайлер, трассирующий каждый вызов ?

handbrake ★★★
()
Последнее исправление: handbrake (всего исправлений: 2)

может тебе newrelic нужен?

ei-grad ★★★★★
()

def function(): start_time = time.time()

blabla=blablabla blabla=blabla( bla )

speed = time.time() - start_time logger.info(«Speed of function = » + str( speed ) ) return bla

как бы так было всегда и будет так, потом просто меняешь info на debug, если слишком шумит... и всё

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.