Как использовать таймер в Python?
Python Timer Functions: Three Ways to Monitor Your Code
В этом учебнике вы узнаете, как использовать таймер Python для отслеживания скорости выполнения ваших программ. Вы также получите фоновые знания о том, как работают классы, менеджеры контекста и декораторы. Исследуя примеры каждого из этих концепций, вы будете вдохновлены использовать одну или несколько из них в своем коде, для измерения времени выполнения кода, а также в других приложениях. Вам будет показано, какой метод использовать в зависимости от ситуации. Плюс, у вас будет рабочий таймер Python, которым вы можете пользоваться для отслеживания выполнения ваших программ!
Таймеры Python
Сначала давайте рассмотрим некоторый пример кода, который мы будем использовать во время этого учебника. Позже мы добавим таймер Python в этот код для отслеживания его производительности. Вы также узнаете некоторые из самых простых способов измерения времени выполнения этого примера.
Функции таймеров Python
Если вы взглянете на встроенный модуль time
в Python, то заметите несколько функций, которые позволяют измерять время:
Python 3.7 представил несколько новых функций, таких как thread_time()
, а также версии всех вышеперечисленных функций с точностью до наносекунд, названных с суффиксом _ns
(например, perf_counter_ns()
).
Отслеживание времени выполнения кода с помощью time.perf_counter()
Одним из наиболее распространенных способов измерения времени выполнения в Python является использование функции time.perf_counter()
. Эта функция возвращает “время в секундах, прошедшее с момента начала выполнения программы, в переведенном в число числе с плавающей точкой” (согласно документации Python).
Функция perf_counter()
полезна для измерения времени выполнения отдельных участков кода или функций. Она предлагает более высокую точность, чем функция time.time()
, и может использоваться для определения узких мест в вашем коде и оценки эффективности его оптимизации.
В этом примере мы используем функцию time.perf_counter()
для измерения времени выполнения некоторого кода. Мы сохраняем текущее время в переменной start_time
, выполняем код, затем сохраняем текущее время в переменной end_time
. Мы вычисляем разницу между end_time
и start_time
, чтобы получить общее время выполнения кода и выводим его на экран.
Создание собственного таймера Python
Кроме использования встроенных функций таймера, в Python вы можете создать свой собственный таймер с помощью классов, контекстных менеджеров или декораторов.
Использование класса таймера Python
В этом примере мы создаем класс Timer
с методами start
, stop
и get_execution_time
. Метод start
сохраняет текущее время в переменную self.start_time
, метод stop
сохраняет текущее время в переменную self.end_time
, и метод get_execution_time
вычисляет и возвращает разницу между self.end_time
и self.start_time
, чтобы получить общее время выполнения.
Использование менеджера контекста таймера Python
В этом примере мы создаем класс Timer
с методами __enter__
и __exit__
. Метод __enter__
запускается в начале блока кода, возвращая экземпляр класса Timer
. Метод __exit__
вызывается в конце блока кода. Мы можем использовать Timer
с помощью менеджера контекста with
, благодаря чему у нас нет необходимости явно вызывать методы start
и stop
.
Использование декоратора таймера Python
В этом примере мы создаем декоратор timer_decorator
, который принимает функцию и возвращает обертку wrapper
. Внутри обертки мы измеряем время выполнения функции с помощью функции time.perf_counter()
, а затем выводим время выполнения на экран. Мы применяем декоратор к функции my_function
с помощью символа @
, чтобы автоматически применить этот декоратор к функции.
Другие функции таймера Python
В дополнение к основным функциям таймера Python, существуют и другие функции:
- Использование альтернативных функций таймера Python
- Оценка времени выполнения с помощью
timeit
- Поиск узких мест в коде с помощью профилировщиков
Заключение
Теперь у вас есть все инструменты, чтобы измерять время выполнения вашего кода в Python с помощью таймеров. С помощью встроенной функции time.perf_counter()
, создания собственного таймера с помощью классов, менеджеров контекста или декораторов, а также использования других функций для более точной оценки времени выполнения кода, вы можете улучшить производительность и эффективность своих программ. Попробуйте разные подходы и найдите то, что лучше всего подходит для ваших конкретных потребностей. Удачи в измерении времени выполнения вашего Python-кода!