Форум сайта python.su
Наткнулся тут на статью, которая частино относится к данной теме -
http://www.developers.org.ua/archives/mlk/2008/07/23/python-kung-fu-p1-runtime-compilation/
там достигается повышение производительности, за счет генерации грамотного байт-кода. Я пока в этом не копался, но в целом результат наверно похож на тот, который хотели получить от #define. Только все блин сложнее… Правильно там в начале написано - вместо профита можно пяткой в лоб получить :)
Офлайн
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)
Офлайн
Alex2ndr, вы будете удивлены, как мало случаев требуют знания байткода.
Статья Сергея - неплохой пример эквилибристики. Читал в свое время с удовольствием.
Но это - практически бесполезная вещь.
Офлайн
Уважаемый Ed, ваш пример совершенно некорректен.
Логирование используют для того, чтобы потом читать получившиеся простыни.
И резать вывод прийдется в первую очередь из этих соображений.
После того, как объем логов будет приведен к более или менее разумному значению, вопрос их производительности отпадет сам.
И вообще, никогда профайлер не указывал мне на систему логирования. На все что угодно, подчас самые неожиданные места. А логирование - никогда.
Кстати, господа оптимизаторы… Года два назад интересовался, кто использует профайлер в своей работе. Несколько человек ответили, что использовать - не используют, но обращаться с ним умеют. Остальная публика даже не пыталась.
Какая может быть оптимизация без измерений?
Что стоят измерения синтетических, высосанных из пальца примеров?
Офлайн
Андрей СветловУважаемый Андрей, позвольте с вами не согласиться.
Уважаемый Ed, ваш пример совершенно некорректен.
Логирование используют для того, чтобы потом читать получившиеся простыни.
Отредактировано (Июль 24, 2010 21:02:46)
Офлайн
> Наткнулся тут на статью, которая частино относится к данной теме …. там достигается повышение производительности, за счет генерации грамотного байт-кода.
Для повышения производительности я запускаю питон с параметром -O или -OO, он генерит оптимизированный байткод.
Офлайн
RodegastАга. Убирает docstrings и ставит __debug__ в False. Все.
> Наткнулся тут на статью, которая частино относится к данной теме …. там достигается повышение производительности, за счет генерации грамотного байт-кода.
Для повышения производительности я запускаю питон с параметром -O или -OO, он генерит оптимизированный байткод.
Офлайн
RodegastНасколько я помню там грошовая оптимизация:
Для повышения производительности я запускаю питон с параметром -O или -OO, он генерит оптимизированный байткод.
Отредактировано (Июль 24, 2010 22:01:49)
Офлайн
Ed, я не утверждаю, что logging очень быстрый.
Скорее хочу сказать, что он достаточно хорош, чтобы им пользоваться.
И, как я уже писал, затык был где угодно, но не в логах.
Возможно, мне еще не попался такой случай.
Кстати, препроцессор для Питона, по моему мнению, идет вразрез с концептом языка. То же самое можно сделать обычными условными выражениями, вставленными в код модуля. Может, я опять что-то упускаю, но не вижу необходимости в этом велосипеде.
Офлайн
Да я и не утверждал, что logging - это зло, сам им пользуюсь регулярно. Однако допускаю, что в некоторых(может и редких) случаях обрезать препроцессором logging.debug не помешает.
Офлайн