Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 290

лирования. Модуль журналирования содержит как минимум 15 обработчиков для

отправки сообщений в разные места вроде электронной почты, веб-серверов, экра-

нов и файлов.

Наконец, вы можете управлять форматом сообщений журнала. В нашем первом

примере мы использовали формат, применяемый по умолчанию, в результате чего

появилась следующая строка:

WARNING:root:Message...

Оптимизируем код

371

Если вы предоставите строку format функции basicConfig(), то можете изменить

формат по собственному желанию:

>>> import logging

>>> fmt = '%(asctime)s %(levelname)s %(lineno)s %(message)s'

>>> logging.basicConfig(level='DEBUG', format=fmt)

>>> logger = logging.getLogger('bunyan')

>>> logger.error("Where's my other plaid shirt?")

2014-04-08 23:13:59,899 ERROR 1 Where's my other plaid shirt?

Мы позволили объекту журналирования снова отправить выходные данные на

экран, но изменили их формат. Модуль logging распознал количество имен пере-

менных в строке формата fmt. Мы использовали asctime (дата и время как строка

ISO 8601), levelname, lineno (номер строки) и само сообщение в переменной message.

Существуют и другие встроенные переменные, вы можете предоставить и свои

собственные переменные.

Пакет logging содержит гораздо больше особенностей, чем можно описать в этом

небольшом обзоре. Вы можете писать в несколько журналов одновременно, ука-

зывая разные приоритеты и форматы. Этот пакет довольно гибок, но иногда это

достигается за счет простоты.

Оптимизируем код

Обычно Python работает довольно быстро, однако иногда его скорости не хватает.

В большинстве случаев вы можете ускорить работу, выбрав более качественный

алгоритм или структуру данных. Идея заключается в том, чтобы знать, где это

сделать. Даже опытные программисты ошибаются довольно часто. Вам нужно быть

очень осторожными и семь раз отмерить, прежде чем отрезать. Это приводит нас

к использованию таймеров.

Измеряем время

Вы уже видели, что функция time модуля time возвращает текущее время в форма-

те epoch как число секунд с плавающей точкой. Быстрый способ засечь время —

получить текущее время, что-то сделать, получить новое время и вычесть из него

первое. Напишем соответствующий код и назовем файл time1.py:

from time import time

t1 = time()

num = 5

num *= 2

print(time() — t1)

372

Глава 12. Быть питонщиком

В этом примере мы измеряем время, которое требуется на присвоение значения 5

переменной num и умножение его на 2. Этот пример не является реалистичным те-

стом производительности, это лишь пример того, как замерить время выполнения

произвольного кода. Попробуйте запустить его несколько раз, чтобы увидеть, что