Как засечь время выполнения программы в python
Перейти к содержимому

Как засечь время выполнения программы в python

  • автор:

6 способов измерить скорость программы на Python

Недавно мы решали сложную задачу Эйнштейна с помощью кода на Python, а потом оптимизировали его, чтобы сократить время выполнения. Там всё было просто: с четырёх часов мы оптимизировали время выполнения до долей секунды, и это было явно заметно. Но бывает так, что даже полсекунды оптимизации — это очень хорошо, когда речь идёт о высоконагруженных сервисах. Например, в соцсетях, которыми пользуются сотни тысяч пользователей в минуту. Сегодня мы покажем целых 6 простых способов измерения времени работы кода, которые может использовать каждый.

Как измерять время выполнения кода

В большинстве случаев измерить время работы кода можно так:

  1. Зафиксировать время начала работы.
  2. Зафиксировать время окончания работы.
  3. Вычесть первое значение из второго.

Ещё важно измерять время выполнения кода при одних и тех же условиях:

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

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

Если будете заниматься оптимизацией, вот вам на вырост: нужно различать понятия wall time («время на стене») и процессорное время. Первое показывает прошедшее время от начала до конца работы, второе — время, которое процессор затратил на выполнение кода. Их значения могут различаться, если программа ожидает высвобождение ресурсов для выполнения. Но сейчас можно без этих тонкостей.

Модуль datetime

С помощью такого способа можно измерить время выполнения кода в формате часы:минуты:секунды:микросекунды. Мы использовали модуль datetime, когда оптимизировали код для решения загадки Эйнштейна и ускоряли работу программы более чем в 200 тысяч раз.

# подключаем модуль datetime import datetime # фиксируем и выводим время старта работы кода start = datetime.datetime.now() print('Время старта: ' + str(start)) # код, время работы которого измеряем #фиксируем и выводим время окончания работы кода finish = datetime.datetime.now() print('Время окончания: ' + str(finish)) # вычитаем время старта из времени окончания print('Время работы: ' + str(finish - start))

Результат — 51 тысячная секунды. Неплохо, но что покажут другие способы?

6 способов измерить скорость программы на Python

Модуль time

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

  • time.time() поможет измерить время работы в секундах. Если нужно получить время в минутах, результат вычисления нужно разделить на 60, в миллисекундах — умножить на 1000.
  • time.perf_counter() также можно использовать для измерения времени в секундах, но таймер не будет зависеть от системных часов. Функцию используют, чтобы избежать погрешностей. Функция time.perf_counter_ns() вернёт значение в наносекундах.
  • time.monotonic() подходит для больших программ, поскольку эта функция не зависит от корректировки времени системы. Функция использует отдельный таймер, как и time.perf_counter(), но имеет более низкое разрешение. С помощью time.monotonic_ns() можно получить результат в наносекундах.
  • time.process_time() поможет получить сумму системного и пользовательского процессорного времени в секундах, не включая время сна. Если процесс выполнения блокируется функцией time.sleep() или приостанавливается операционной системой, это время не включается в отчётное. Для наносекунд есть функция time.process_time_ns(), но её поддерживают не все платформы.
  • time.thread_time() сообщит время выполнения текущего потока, а не процесса. Если в коде есть функция time.sleep(), время её выполнения не будет включено.

Time.time(). Давайте посчитаем время выполнения нашего кода с помощью функции time.time() в миллисекундах:

# подключаем модуль time import time # фиксируем время старта работы кода start = time.time() # код, время работы которого измеряем #фиксируем время окончания работы кода finish = time.time() # вычитаем время старта из времени окончания и получаем результат в миллисекундах res = finish - start res_msec = res * 1000 print('Время работы в миллисекундах: ', res_msec)

Получаем результат: 61 тысячная секунды. Результат отличается от предыдущего, тут уже нужно было бы хорошо сделать серию тестов и посчитать среднее значение.

6 способов измерить скорость программы на Python

Time.perf_counter(). Посчитаем время выполнения нашего кода с помощью функции time.perf_counter() в секундах:

# подключаем модуль time import time # фиксируем время старта работы кода start = time.perf_counter() # код, время работы которого измеряем #фиксируем время окончания работы кода finish = time.perf_counter() # вычитаем время старта из времени окончания и выводим результат print('Время работы: ' + str(finish - start))

Мы получили 51 тысячную секунды — почти такой же результат, как и в самый первый раз. Кажется, что это точное время, но посмотрим, что будет дальше.

6 способов измерить скорость программы на Python

Time.monotonic_ns(). Посчитаем время выполнения нашего кода с помощью функции time.monotonic_ns() в наносекундах:

# подключаем модуль time import time # фиксируем время старта работы кода start = time.monotonic_ns() # код, время работы которого измеряем #фиксируем время окончания работы кода finish = time.monotonic_ns() # вычитаем время старта из времени окончания и получаем результат в наносекундах print('Время работы в наносекундах: ' + str(finish - start))

Результат примерно такой же — 52 тысячные секунды, но количество цифр в результате меньше, чем в предыдущем случае.

6 способов измерить скорость программы на Python

Time.process_time(). Посчитаем сумму системного и пользовательского процессорного времени в секундах:

# подключаем модуль time import time # фиксируем время старта работы кода start = time.process_time() # код, время работы которого измеряем #фиксируем время окончания работы кода finish = time.process_time() # вычитаем время старта из времени окончания и выводим результат print('Время работы: ' + str(finish - start))

Время работы снова выросло — с 51 до 62 тысячных секунды. Для одних программ такой разброс вообще некритичен, а для других это может означать, что нужно провести больше тестов.

6 способов измерить скорость программы на Python

Time.thread_time(). Наконец, посчитаем время выполнения кода с помощью time.thread_time():

# подключаем модуль time import time # фиксируем время старта работы кода start = time.thread_time() # код, время работы которого измеряем #фиксируем время окончания работы кода finish = time.thread_time() # вычитаем время старта из времени окончания и выводим результат print('Время работы: ' + str(finish - start))

Время работы снова выглядит правдоподобно в сравнении с предыдущим результатом.

6 способов измерить скорость программы на Python

Что дальше

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

Измерение времени выполнения кода в Python

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

Модуль time

Одним из способов измерения времени выполнения кода в Python является использование модуля time . Этот модуль предоставляет функцию time() , которая возвращает текущее время в секундах с момента, который называется «эпохой». Обычно это 00:00 1 января 1970 года.

import time # начальное время start_time = time.time() # код, время выполнения которого нужно измерить for i in range(0, 1000000): pass # конечное время end_time = time.time() # разница между конечным и начальным временем elapsed_time = end_time - start_time print('Elapsed time: ', elapsed_time)

Модуль timeit

Другим способом является использование модуля timeit . Этот модуль предоставляет более точный способ измерения времени выполнения кода, поскольку он автоматически учитывает время, которое занимает вызов функции time() и другие факторы. Вместо этого timeit многократно выполняет код и возвращает среднее время выполнения.

import timeit # код, время выполнения которого нужно измерить code_to_test = """ a = range(1000000) b = [] for i in a: b.append(i*2) """ # вычисление времени выполнения кода elapsed_time = timeit.timeit(code_to_test, number=100)/100 print('Elapsed time: ', elapsed_time)

В приведенном примере timeit() выполняет код 100 раз и возвращает общее время выполнения. Затем это время делится на 100, чтобы получить среднее время выполнения.

Как засечь время выполнения программы в python

print(«— %s seconds —» % (time.time() — start_time))

Более безопасный способ, потому что time.monotonic() никогда не идёт назад, даже если на машине будет переведено время:

from datetime import timedelta

  • Закодировать файл в base64 на Python
  • Рекурсивное создание директорий в Python
  • Сортировка в Python
  • Правильно добавить год/месяц к дате в Python
  • Отформатировать дату в Python
  • Получить рабочую директорию и директорию со скриптом в Python
  • Копия объекта в Python
  • Время выполнения программы на Python
  • Конвертировать datetime.timedelta в строку
  • Парсинг даты в Python
  • Конвертировать строку (str) в булевый тип (bool) в Python
  • Получить местный часовой пояс в Python
  • Проверить, что строка соответствует регулярному выражению в Python
  • Просмотреть доступные версии модулей в PIP
  • Получить целочисленный Unix timestamp в Python
  • getter и setter в Python
  • Настроить формат вывода логов в Python
  • Получить переменную окружения в Python
  • Обновить пакет в PIP
  • Получить имя (хостнейм) машины из Python
  • Вывести стэк вызовов при возникновении исключения в Python
  • Функция eval в Python
  • Дозаписывать (append) в файл в Python
  • Препроцессинг кода в Python
  • Проверить, что программа установлена из Python
  • Настроить путь для импорта библиотек в Python
  • Получить размер терминала в символах в Python
  • Enum с дополнительными полями в Python
  • Ошибка invalid command ‘bdist_wheel’ при установке пакета через PIP
  • Получить список аргументов функции из Python
  • Сделать словарь только для чтения в Python
  • Заматчить любой символ, включая перевод строки, в регулярных выражениях на Python
  • Получить список файлов в директории через pathlib в Python
  • Вывести действительное число с округлением до нескольких символов после запятой в Python
  • Вывод в терминал текста с цветами в Python
  • Перезагрузить импортированный модуль в Python
  • Безопасно создать список/словарь/любой объект из строкового представления в Python
  • Аналог декоратора @property для методов класса в Python
  • Перехватить ошибку TimeoutError в asyncio
  • Отключить вывод логов в Python
  • Уровни логгирования в Python
  • Удалить *.pyc и __pycache__ файлы
  • Выгрузить объект в JSON в Unicode в Python
  • Конвертировать datetime в другую часовую зону в Python
  • Дополнить строку нулями в Python
  • Вычислить MD5 от строки в Python
  • Удалить знаки пунктуации из строки в Python
  • Проверить, что первая буква в строке — заглавная, в Python
  • Разбить (split) строку по нескольким разделителям в Python
  • Отсортировать версии в Python
  • Распаковать любой архив в Python
  • Получить имя текущего скрипта на Python
  • Установка pip на Python 2.6
  • Отличить печатаемый символ Unicode от непечатаемого на Python
  • Вывести версию интерпретатора Python в машиночитаемом виде
  • Найти место, куда Python устанавливает пакеты (dist-packages, site-packages)

Как оценить время выполнения кода в Python

machine learning курсы, python machine learning уроки, курсы по машинному обучению, предобработка данных python, курс машинное обучение на python, открытый курс машинного обучения, бесплатный курс по питон, nlp python, курс машинное обучение на python, курс по подготовке данных, курс машинное обучение на python, открытый курс машинного обучения, бесплатный курс по питон, nlp python, курс машинное обучение на python, курс по подготовке данных

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

Оценка времени работы кода в Python: несколько практических примеров

Одним из важных аспектов при разработке программного обеспечения является оптимизация производительности. Оценка времени выполнения кода играет важную роль в определении эффективности алгоритмов и выявлении мест, где можно улучшить скорость работы программы. Одним из способов данной оценки является модуль time. Модуль time предоставляет функции для работы со временем в Python. Одна из таких функций — time.time() , которая возвращает количество секунд, прошедших с начала эпохи (обычно 1 января 1970 года). Можно использовать эту функцию для измерения времени выполнения определенного участка кода:

import time start_time = time.time() # Ваш код, время выполнения которого нужно измерить end_time = time.time() execution_time = end_time - start_time print(f"Время выполнения: секунд")

Модуль timeit предназначен специально для измерения времени выполнения небольших фрагментов кода. Он предоставляет функцию timeit() , которая автоматически повторяет выполнение кода несколько раз и возвращает среднее время выполнения:

import timeit code_to_test = """ # Код, время выполнения которого нужно измерить """ execution_time = timeit.timeit(code_to_test, number=1000) print(f"Среднее время выполнения: секунд")

Модуль line_profiler предоставляет декоратор @profile , который можно использовать для профилирования кода и измерения выполнения каждой строки. Чтобы использовать этот декоратор, необходимо установить line_profiler с помощью pip install line_profiler :

import line_profiler @profile def your_function(): # Ваш код, время выполнения которого нужно измерить pass your_function()

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *