Уведомления

Группа в Telegram: @pythonsu

#1 Июль 23, 2010 22:19:53

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

#define в python 2.6 есть?

Наткнулся тут на статью, которая частино относится к данной теме -
http://www.developers.org.ua/archives/mlk/2008/07/23/python-kung-fu-p1-runtime-compilation/
там достигается повышение производительности, за счет генерации грамотного байт-кода. Я пока в этом не копался, но в целом результат наверно похож на тот, который хотели получить от #define. Только все блин сложнее… Правильно там в начале написано - вместо профита можно пяткой в лоб получить :)



Офлайн

#2 Июль 23, 2010 23:30:00

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

#define в python 2.6 есть?

ZZZ
Не вижу проблем.
Это не значит, что их нет.
Вот вам образчик. Искусственный, конечно, но проблему показывает.
$ cat cost_of_debug.py 
import logging
logger = logging.getLogger()
for i in xrange(1000000):
i += 1
logger.debug('i = %d' % i)
i += 2
logger.debug('now i = %d' % i)

$ time python cost_of_debug.py

real 0m17.534s
user 0m17.410s
sys 0m0.032s

$ sed -i 's/logger\.debug/#logger.debug/g' cost_of_debug.py
$ cat cost_of_debug.py
import logging
logger = logging.getLogger()
for i in xrange(1000000):
i += 1
#logger.debug('i = %d' % i)
i += 2
#logger.debug('now i = %d' % i)
$ time python cost_of_debug.py

real 0m0.661s
user 0m0.646s
sys 0m0.011s
C/C++? :-)
По-моему прогнать код таким препроцессором станет чуть дешевле, чем переписывать куски на C/C++
Впрочем случаи разные бывают, как говорится. Но подход имеет право на жизнь.



Отредактировано (Июль 23, 2010 23:31:12)

Офлайн

#3 Июль 24, 2010 03:12:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

#define в python 2.6 есть?

Alex2ndr, вы будете удивлены, как мало случаев требуют знания байткода.
Статья Сергея - неплохой пример эквилибристики. Читал в свое время с удовольствием.
Но это - практически бесполезная вещь.



Офлайн

#4 Июль 24, 2010 03:21:50

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

#define в python 2.6 есть?

Уважаемый Ed, ваш пример совершенно некорректен.
Логирование используют для того, чтобы потом читать получившиеся простыни.
И резать вывод прийдется в первую очередь из этих соображений.
После того, как объем логов будет приведен к более или менее разумному значению, вопрос их производительности отпадет сам.

И вообще, никогда профайлер не указывал мне на систему логирования. На все что угодно, подчас самые неожиданные места. А логирование - никогда.

Кстати, господа оптимизаторы… Года два назад интересовался, кто использует профайлер в своей работе. Несколько человек ответили, что использовать - не используют, но обращаться с ним умеют. Остальная публика даже не пыталась.
Какая может быть оптимизация без измерений?
Что стоят измерения синтетических, высосанных из пальца примеров?



Офлайн

#5 Июль 24, 2010 21:02:23

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

#define в python 2.6 есть?

Андрей Светлов
Уважаемый Ed, ваш пример совершенно некорректен.
Логирование используют для того, чтобы потом читать получившиеся простыни.
Уважаемый Андрей, позвольте с вами не согласиться.
Пример искусственный, и я об этом написал. Но он не высосан из пальца. Если программа делает сложные и долгие рассчеты, то логирование вполне может влиять на производительность. Может и не так, как в примере, но существенно. Кроме того в примере вывода, как такового нет. Если мне не изменяет память, то по умолчанию уровень логгинга там WARNING, то есть в моих примерах никакого вывода logger.debug не производит, а только тормозит вычисления.



Отредактировано (Июль 24, 2010 21:02:46)

Офлайн

#6 Июль 24, 2010 21:11:34

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2789
Репутация: +  185  -
Профиль   Отправить e-mail  

#define в python 2.6 есть?

> Наткнулся тут на статью, которая частино относится к данной теме …. там достигается повышение производительности, за счет генерации грамотного байт-кода.

Для повышения производительности я запускаю питон с параметром -O или -OO, он генерит оптимизированный байткод.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Июль 24, 2010 21:49:11

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

#define в python 2.6 есть?

Rodegast
> Наткнулся тут на статью, которая частино относится к данной теме …. там достигается повышение производительности, за счет генерации грамотного байт-кода.

Для повышения производительности я запускаю питон с параметром -O или -OO, он генерит оптимизированный байткод.
Ага. Убирает docstrings и ставит __debug__ в False. Все.



Офлайн

#8 Июль 24, 2010 21:57:43

Alex2ndr
От:
Зарегистрирован: 2009-12-26
Сообщения: 204
Репутация: +  0  -
Профиль   Отправить e-mail  

#define в python 2.6 есть?

Rodegast
Для повышения производительности я запускаю питон с параметром -O или -OO, он генерит оптимизированный байткод.
Насколько я помню там грошовая оптимизация:
1. при -O внутренняя переменная интерпретатора __debug__ устанавливается в 0( т е фактически отключен assert).
2. при -OO еще и убираются все докстринги
Реального прироста в скорости это все не дает.

PS Я не обновил страницу перед тем как запостил, а Андрей Светлов меня опередил :)



Отредактировано (Июль 24, 2010 22:01:49)

Офлайн

#9 Июль 24, 2010 21:58:34

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

#define в python 2.6 есть?

Ed, я не утверждаю, что logging очень быстрый.
Скорее хочу сказать, что он достаточно хорош, чтобы им пользоваться.
И, как я уже писал, затык был где угодно, но не в логах.
Возможно, мне еще не попался такой случай.

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



Офлайн

#10 Июль 24, 2010 23:04:20

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

#define в python 2.6 есть?

Да я и не утверждал, что logging - это зло, сам им пользуюсь регулярно. Однако допускаю, что в некоторых(может и редких) случаях обрезать препроцессором logging.debug не помешает.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version