Пропустить до содержимого

Использование функции timing в Python

CodeMDD.io

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

  1. Импорт необходимых модулей.
  2. Установка URL и пути для загрузки учебников.
  3. Создание функции для загрузки учебников.
  4. Использование Python таймера для измерения времени выполнения загрузки.
  5. Вывод результата времени выполнения.

Давайте приступим к написанию кода!

import requests
import time
url = "https:https://codemdd.io/example.comhttps://codemdd.io/tutorials"
download_path = "downloadshttps://codemdd.io/"
def download_tutorials():
response = requests.get(url)
if response.status_code == 200:
with open(download_path + "tutorials.txt", "wb") as file:
file.write(response.content)
else:
print("Error downloading tutorials")
start_time = time.perf_counter()
download_tutorials()
end_time = time.perf_counter()
execution_time = end_time - start_time
print(f"Download completed in {execution_time:.2f} seconds")

Ваш первый Python таймер

В предыдущем примере кода мы использовали функцию time.perf_counter() для измерения времени выполнения загрузки учебников. Эта функция возвращает текущее время, выраженное в секундах, с наибольшей доступной точностью. Первый вызов time.perf_counter() сохраняет начальное время выполнения, а второй вызов сохраняет конечное время выполнения. Код завершается вычислением разницы между начальным и конечным временем выполнения, чтобы получить общее время выполнения программы.

Когда вы запустите этот код, вы увидите результат, который сообщает вам, сколько времени заняла загрузка учебников.

Класс таймера Python

Теперь, когда вы познакомились с простым способом измерения времени выполнения, давайте посмотрим, как мы можем использовать классы для создания более гибкого и удобочитаемого таймера Python.

Понимание классов в Python

В Python классы используются для создания объектов, которые могут содержать переменные и функции. Это позволяет организовать код в логические блоки и создать представление реального объекта или процесса.

Каждый класс в Python включает в себя ключевое слово class, за которым следует имя класса. Внутри класса можно добавлять атрибуты (переменные) и методы (функции), которые определяют поведение этого класса.

Создание класса таймера Python

Для создания класса таймера Python создайте новый файл с именем timer.py. Вот пример кода, который обеспечивает основную структуру класса таймера:

import time
class Timer:
def __enter__(self):
self.start_time = time.perf_counter()
return self
def __exit__(self, *args):
self.end_time = time.perf_counter()
self.execution_time = self.end_time - self.start_time
print(f"Execution time: {self.execution_time:.2f} seconds")

Когда мы используем менеджер контекста with с классом таймера, методы __enter__() и __exit__() будут вызываться автоматически перед и после выполнения блока кода внутри with. В методе __enter__() мы сохраняем начальное время выполнения, а в методе __exit__() мы сохраняем конечное время выполнения и выводим результат.

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

Теперь, когда у нас есть класс таймера, мы можем использовать его для измерения времени выполнения блока кода. Вот пример кода, который демонстрирует использование класса таймера:

from timer import Timer
with Timer():
# Ваш код

Вместо # Ваш код поместите код, который вы хотите измерить. При запуске этого кода вы увидите результат, который сообщает вам, сколько времени заняло выполнение блока кода.

Менеджер контекста таймера Python

Теперь давайте рассмотрим еще один подход к измерению времени выполнения кода с использованием менеджера контекста. Менеджеры контекста позволяют выполнять блоки кода с дополнительной логикой перед и после выполнения. Это может быть полезно, например, для открытия и закрытия файлов или установки и снятия блокировок.

Понимание менеджеров контекста в Python

Менеджеры контекста в Python реализуются с помощью методов __enter__() и __exit__(). Метод __enter__() выполняется перед выполнением блока кода, а метод __exit__() - после выполнения блока кода. Метод __exit__() принимает аргументы, содержащие информацию об исключении, возникшем во время выполнения кода в блоке with.

Создание менеджера контекста таймера Python

Для создания менеджера контекста таймера Python создайте новый файл с именем timer.py. Вот пример кода, который обеспечивает основную структуру менеджера контекста таймера:

import time
class Timer:
def __enter__(self):
self.start_time = time.perf_counter()
def __exit__(self, *args):
self.end_time = time.perf_counter()
self.execution_time = self.end_time - self.start_time
print(f"Execution time: {self.execution_time:.2f} seconds")

Когда мы используем менеджер контекста with с классом таймера, методы __enter__() и __exit__() будут вызываться автоматически перед и после выполнения блока кода внутри with. В методе __enter__() мы сохраняем начальное время выполнения, а в методе __exit__() мы сохраняем конечное время выполнения и выводим результат.

Использование менеджера контекста таймера Python

Теперь, когда у нас есть менеджер контекста таймера, мы можем использовать его для измерения времени выполнения блока кода. Вот пример кода, который демонстрирует использование менеджера контекста таймера:

from timer import Timer
with Timer():
# Ваш код

Вместо # Ваш код поместите код, который вы хотите измерить. При запуске этого кода вы увидите результат, который сообщает вам, сколько времени заняло выполнение блока кода.

Декоратор таймера Python

В заключение, рассмотрим декораторы и их применение для измерения времени выполнения функций. Декораторы позволяют обернуть функцию дополнительным кодом до иhttps://codemdd.io/или после ее выполнения. Это может быть полезно, например, для логирования или измерения времени выполнения функции без необходимости модифицировать саму функцию.

Понимание декораторов в Python

Декораторы в Python - это функции, которые принимают другую функцию в качестве аргумента и возвращают новую функцию. Новая функция обычно выполняет какой-то дополнительный код, а затем вызывает исходную функцию.

Создание декоратора таймера Python

Для создания декоратора таймера Python создайте новый файл с именем timer.py. Вот пример кода, который обеспечивает основную структуру декоратора таймера:

import time
from functools import wraps
def timer_decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start_time = time.perf_counter()
result = func(*args, **kwargs)
end_time = time.perf_counter()
execution_time = end_time - start_time
print(f"Execution time: {execution_time:.2f} seconds")
return result
return wrapper

Декоратор timer_decorator принимает функцию func в качестве аргумента и определяет функцию wrapper, которая выполняет дополнительный код: сохранение начального времени выполнения, вызов исходной функции, сохранение конечного времени выполнения, вывод времени выполнения и возврат результата выполнения функции.

Использование декоратора таймера Python

Теперь, когда у нас есть декоратор таймера, мы можем использовать его для измерения времени выполнения функций. Вот пример кода, который демонстрирует использование декоратора таймера:

from timer import timer_decorator
@timer_decorator
def my_function():
# Ваш код

Вместо # Ваш код поместите код функции, которую вы хотите измерить. При запуске этого кода вы увидите результат, который сообщает вам, сколько времени заняло выполнение функции.

Заключение

В этом руководстве мы рассмотрели три способа измерения времени выполнения кода в Python: использование функций таймеров, классов таймеров, менеджеров контекста таймеров и декораторов таймеров. Каждый метод имеет свои преимущества, и вы можете выбрать тот, который лучше всего подходит для вашей задачи.

В дополнение к таймеру Python были рассмотрены и другие функции тайминга: использование альтернативных функций таймеров, оценка времени выполнения с помощью timeit и поиск узких мест в вашем коде с помощью профилировщиков.

Теперь вы готовы использовать Python таймеры для отслеживания выполнения своего кода и повышения его эффективности!

Ресурсы