Использование функции timing в Python
Функции таймера в Python: Три способа отследить работу вашего кода
Во время программирования на Python, многие разработчики осознают, что программы, написанные на чистом Python, могут работать медленнее, чем программы на компилируемых языках, таких как С, Rust и Java. В этом руководстве вы узнаете, как использовать Python таймер для отслеживания скорости выполнения ваших программ.
В этом руководстве вы узнаете, как использовать:
- time.perf_counter() для измерения времени выполнения в Python.
- Классы для хранения состояний.
- Менеджеры контекста для работы с блоком кода.
- Декораторы для настройки функций.
Вы также получите фоновые знания о том, как работают классы, менеджеры контекста и декораторы. Рассмотрев примеры каждого из этих концептов, вы будете вдохновлены использовать их в своих программах для отслеживания времени выполнения кода и в других приложениях. Каждый метод имеет свои преимущества, и вы узнаете, какой использовать в зависимости от ситуации. Кроме того, у вас будет рабочий Python таймер, который вы сможете использовать для отслеживания ваших программ!
Python таймеры
Сначала давайте рассмотрим некоторый пример кода, который мы будем использовать на протяжении всего руководства. Позже мы добавим Python таймер в этот код, чтобы отслеживать его производительность. Вы также узнаете один из самых простых способов измерения времени выполнения этого примера.
Функции таймера Python
Если вы взглянете на встроенный модуль time
в Python, то заметите несколько функций, которые могут измерять время:
В Python 3.7 было добавлено несколько новых функций, таких как thread_time()
, а также версии всех указанных выше функций с точностью в наносекундах, имена которых заканчиваются на _ns
. Например, perf_counter_ns()
является версией с точностью в наносекундах.
В руководстве будет использоваться функция perf_counter()
. Она предоставляет наилучшую точность для измерения времени выполнения программы.
Пример: Загрузка учебников
Для лучшего понимания использования Python таймера мы рассмотрим пример кода, который загружает учебники из интернета. Пример будет состоять из следующих шагов:
- Импорт необходимых модулей.
- Установка URL и пути для загрузки учебников.
- Создание функции для загрузки учебников.
- Использование Python таймера для измерения времени выполнения загрузки.
- Вывод результата времени выполнения.
Давайте приступим к написанию кода!
Ваш первый Python таймер
В предыдущем примере кода мы использовали функцию time.perf_counter()
для измерения времени выполнения загрузки учебников. Эта функция возвращает текущее время, выраженное в секундах, с наибольшей доступной точностью. Первый вызов time.perf_counter()
сохраняет начальное время выполнения, а второй вызов сохраняет конечное время выполнения. Код завершается вычислением разницы между начальным и конечным временем выполнения, чтобы получить общее время выполнения программы.
Когда вы запустите этот код, вы увидите результат, который сообщает вам, сколько времени заняла загрузка учебников.
Класс таймера Python
Теперь, когда вы познакомились с простым способом измерения времени выполнения, давайте посмотрим, как мы можем использовать классы для создания более гибкого и удобочитаемого таймера Python.
Понимание классов в Python
В Python классы используются для создания объектов, которые могут содержать переменные и функции. Это позволяет организовать код в логические блоки и создать представление реального объекта или процесса.
Каждый класс в Python включает в себя ключевое слово class
, за которым следует имя класса. Внутри класса можно добавлять атрибуты (переменные) и методы (функции), которые определяют поведение этого класса.
Создание класса таймера Python
Для создания класса таймера Python создайте новый файл с именем timer.py
. Вот пример кода, который обеспечивает основную структуру класса таймера:
Когда мы используем менеджер контекста with
с классом таймера, методы __enter__()
и __exit__()
будут вызываться автоматически перед и после выполнения блока кода внутри with
. В методе __enter__()
мы сохраняем начальное время выполнения, а в методе __exit__()
мы сохраняем конечное время выполнения и выводим результат.
Использование класса таймера Python
Теперь, когда у нас есть класс таймера, мы можем использовать его для измерения времени выполнения блока кода. Вот пример кода, который демонстрирует использование класса таймера:
Вместо # Ваш код
поместите код, который вы хотите измерить. При запуске этого кода вы увидите результат, который сообщает вам, сколько времени заняло выполнение блока кода.
Менеджер контекста таймера Python
Теперь давайте рассмотрим еще один подход к измерению времени выполнения кода с использованием менеджера контекста. Менеджеры контекста позволяют выполнять блоки кода с дополнительной логикой перед и после выполнения. Это может быть полезно, например, для открытия и закрытия файлов или установки и снятия блокировок.
Понимание менеджеров контекста в Python
Менеджеры контекста в Python реализуются с помощью методов __enter__()
и __exit__()
. Метод __enter__()
выполняется перед выполнением блока кода, а метод __exit__()
- после выполнения блока кода. Метод __exit__()
принимает аргументы, содержащие информацию об исключении, возникшем во время выполнения кода в блоке with
.
Создание менеджера контекста таймера Python
Для создания менеджера контекста таймера Python создайте новый файл с именем timer.py
. Вот пример кода, который обеспечивает основную структуру менеджера контекста таймера:
Когда мы используем менеджер контекста with
с классом таймера, методы __enter__()
и __exit__()
будут вызываться автоматически перед и после выполнения блока кода внутри with
. В методе __enter__()
мы сохраняем начальное время выполнения, а в методе __exit__()
мы сохраняем конечное время выполнения и выводим результат.
Использование менеджера контекста таймера Python
Теперь, когда у нас есть менеджер контекста таймера, мы можем использовать его для измерения времени выполнения блока кода. Вот пример кода, который демонстрирует использование менеджера контекста таймера:
Вместо # Ваш код
поместите код, который вы хотите измерить. При запуске этого кода вы увидите результат, который сообщает вам, сколько времени заняло выполнение блока кода.
Декоратор таймера Python
В заключение, рассмотрим декораторы и их применение для измерения времени выполнения функций. Декораторы позволяют обернуть функцию дополнительным кодом до иhttps://codemdd.io/или после ее выполнения. Это может быть полезно, например, для логирования или измерения времени выполнения функции без необходимости модифицировать саму функцию.
Понимание декораторов в Python
Декораторы в Python - это функции, которые принимают другую функцию в качестве аргумента и возвращают новую функцию. Новая функция обычно выполняет какой-то дополнительный код, а затем вызывает исходную функцию.
Создание декоратора таймера Python
Для создания декоратора таймера Python создайте новый файл с именем timer.py
. Вот пример кода, который обеспечивает основную структуру декоратора таймера:
Декоратор timer_decorator
принимает функцию func
в качестве аргумента и определяет функцию wrapper
, которая выполняет дополнительный код: сохранение начального времени выполнения, вызов исходной функции, сохранение конечного времени выполнения, вывод времени выполнения и возврат результата выполнения функции.
Использование декоратора таймера Python
Теперь, когда у нас есть декоратор таймера, мы можем использовать его для измерения времени выполнения функций. Вот пример кода, который демонстрирует использование декоратора таймера:
Вместо # Ваш код
поместите код функции, которую вы хотите измерить. При запуске этого кода вы увидите результат, который сообщает вам, сколько времени заняло выполнение функции.
Заключение
В этом руководстве мы рассмотрели три способа измерения времени выполнения кода в Python: использование функций таймеров, классов таймеров, менеджеров контекста таймеров и декораторов таймеров. Каждый метод имеет свои преимущества, и вы можете выбрать тот, который лучше всего подходит для вашей задачи.
В дополнение к таймеру Python были рассмотрены и другие функции тайминга: использование альтернативных функций таймеров, оценка времени выполнения с помощью timeit и поиск узких мест в вашем коде с помощью профилировщиков.
Теперь вы готовы использовать Python таймеры для отслеживания выполнения своего кода и повышения его эффективности!