отправки сообщений в разные места вроде электронной почты, веб-серверов, экра-
нов и файлов.
Наконец, вы можете управлять форматом сообщений журнала. В нашем первом
примере мы использовали формат, применяемый по умолчанию, в результате чего
появилась следующая строка:
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. Этот пример не является реалистичным те-
стом производительности, это лишь пример того, как замерить время выполнения
произвольного кода. Попробуйте запустить его несколько раз, чтобы увидеть, что