Python узнать время выполнения программы

3 инструмента для отслеживания и визуализации выполнения кода на Python

А хотели бы, чтобы вывод был немного более понятным и наглядным? Как показано здесь:

Или даже сделать визуализацию того, какие строки кода выполняются и сколько раз они выполняются в режиме реального времени:

Именно это помогут сделать инструменты, о которых пойдет речь дальше в статье. Вот эти три инструмента.

  • Loguru — для лучшего вывода исключений.
  • Snoop — печатает строки кода, выполняемого в функции.
  • Heartrate — визуализирует выполнение программы на Python в режиме реального времени.

И для использования этих инструментов нужна всего одна строка кода!

Loguru — для лучшего вывода исключений

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

Как узнать время выполнения программы? #python #программирование

Устанавливается Loguru так:

pip install loguru

Разберемся, чем так хорош Loguru. Представьте, что у вас две функции division и divide_numbers и выполняется функция divide_numbers :

from itertools import combinations def division(num1: int, num2: int): return num1/num2 def divide_numbers(num_list: list): «»»Division of 2 numbers in the number list «»» for comb in combinations(num_list, 2): num1, num2 = comb res = division(num1, num2) print(f» divided by is equal to .») if __name__ ==’__main__’: num_list = [2, 1, 0] divide_numbers(num_list)

Обратите внимание: combinations([2,1,0], 2) возвращает [(2, 1), (2, 0), (1, 0)] . После выполнения этого кода получаем такую ошибку:

2 divided by 1 is equal to 2.0. Traceback (most recent call last): File «loguru_example.py», line 17, in divide_numbers(num_list) File «loguru_example.py», line 11, in divide_numbers res = division(num1, num2) File «loguru_example.py», line 5, in division return num1/num2 ZeroDivisionError: division by zero

По этому выводу мы видим, что ошибка возникает в строке return num1/num2 , но не знаем, которое из значений ( num1 или num2 ) вызывает ее. К счастью, это легко отследить, добавив декоратор Loguru logger.catch :

Добавили logger.catch , и теперь исключения гораздо проще трактовать! Оказывается, ошибка возникает при делении 2 на 0 .

Snoop — печатает строки кода, выполняемого в функции

А что, если в коде нет ошибки, но мы хотим выяснить, что в нем происходит? Здесь пригодится snoop.

Snoop — это пакет Python, который печатает строки выполняемого кода вместе со значениями каждой переменной. Для этого надо добавить всего лишь один декоратор.

Простой способ замерить скорость работы кода в python

Устанавливается snoop так:

pip install snoop

Допустим, у нас есть функция factorial , которая находит факториал целого числа:

Читайте также:
Как обрезать часть видео на компьютере без программ

import snoop def factorial(x: int): if x == 1: return 1 else: return (x * factorial(x-1)) if __name__ == «__main__»: num = 5 print(f»The factorial of is «)
The factorial of 5 is 120

Разобраться, почему факториал factorial(5) равен 20 , помогает добавление к функции factorial декоратора snoop :

В этом выводе показываются значения переменных и то, какие строки кода выполняются. Теперь рекурсия понятна намного лучше!

Heartrate — визуализирует выполнение программы на Python в режиме реального времени

Для визуализации того, какие строки кода выполняются и сколько раз, попробуйте heartrate.

heartrate — инструмент от создателя snoop. Устанавливается heartrate так:

pip install heartrate

Теперь добавим в предыдущий код heartrate.trace(browser=True) . Откроется окно браузера, отображающее визуализацию файла, в котором вызван этот trace() :

import heartrate heartrate.trace(browser=True) def factorial(x): if x == 1: return 1 else: return (x * factorial(x-1)) if __name__ == «__main__»: num = 5 print(f»The factorial of is «)

При запуске этого кода должен появиться новый браузер. Если не появился, перейдите по адресу http://localhost:9999. Вот такой вывод вы должны увидеть:

Темно- и светло-синие полосы показывают строки кода, которые выполнялись. Чем длиннее полосы, тем больше было выполнений, более светлые цвета соответствуют самым последним выполнениям.

По этому выводу мы видим, что программа выполняется:

  • if x==1 пять раз.
  • return 1 один раз.
  • return (x * factorial(x-1)) четыре раза.

Вывод имеет смысл, так как исходное значение x равно 5 и функция вызывается повторно до тех пор, пока x не станет равным 1 .

Теперь посмотрим, как визуализируется выполнение программы на Python в режиме реального времени с помощью heartrate. Добавим sleep(0.5) , чтобы программа работала немного медленнее, а num увеличилось до 20 :

import heartrate from time import sleep heartrate.trace(browser=True) def factorial(x): if x == 1: return 1 else: sleep(0.5) return (x * factorial(x-1)) if __name__ == «__main__»: num = 20 print(f»The factorial of is «)

Теперь мы видим, какие строки кода выполняются и сколько раз каждая из них выполнялась в режиме реального времени.

Заключение

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

Смело дублируйте исходный код этой статьи и экспериментируйте здесь.

  • Как оптимизировать набор текста с помощью Python
  • Как создать простого командного бота в Python
  • 22 сниппета на Python для повседневных задач

Источник: nuancesprog.ru

Time Python

Основы

Автор Иван Душенко На чтение 9 мин Просмотров 2.8к. Опубликовано 02.07.2021

Введение в тему

Программисты часто сталкиваются с задачами по обработке времени. Эти задачи не являются тривиальными, поскольку существует множество способов представления этих данных. Они зависят от региона и личных предпочтений человека, записывающего их. В этом уроке мы рассмотрим модуль стандартной библиотеки time Python, который предназначен для упрощения таких работ.

Для начала работы с этим модулем его необходимо добавить в Ваш код:

Читайте также:
Программное обеспечение компьютера виды прикладных программ

import time

Python time time

ОС Unix была создана в 1970 году, а значит файл этой системы не мог быть создан ранее 1970-01-01. Поэтому для данной системы была принята точка отсчёта времени — 1 января 1970, 00:00:00 (UTC). Её назвали началом эпохи и время стали считать, как количество секунд (миллисекунд), прошедших с этого момента.

Такой подход, де-факто, стал широко распространённым стандартом из-за однозначности определения времени. Функция time.time() даёт возможность узнать сколько на данный момент прошло секунд от начала эпохи.

import time секунд_с_начала_эпохи = time.time() print(«С 1 января 1970, 00:00:00 прошло», секунд_с_начала_эпохи, «секунд.») #Вывод: С 1 января 1970, 00:00:00 прошло 1625195121.0941737 секунд.

Python time ctime

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

import time секунд_с_начала_эпохи = time.time() print(«С 1 января 1970, 00:00:00 прошло», секунд_с_начала_эпохи, «секунд.») местное_время = time.ctime(секунд_с_начала_эпохи) print(«Это», местное_время, «по местному времени.») #Вывод: С 1 января 1970, 00:00:00 прошло 1625203810.2798948 секунд. Это Fri Jul 2 08:30:10 2021 по местному времени.

Python time sleep

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

В качестве параметра необходимо передать время задержки в секундах. Проверим её работу:

import time время_запуска = time.time() time.sleep(5.16) время_завершения = time.time() print(«Время запуска», время_запуска) print(«Время завершения», время_завершения) print(«Прошло времени», время_завершения-время_запуска) #Вывод: Время запуска 1625204320.242042 Время завершения 1625204325.4020572 Прошло времени 5.160015106201172

Класс time struct_time

Класс struct_time модуля time представляет собой тип набора значений времени, возвращаемых функциями time.gmtime(), time.localtime() и time.strptime(). Значения могут быть доступны по индексу и по имени атрибута. Данная коллекция является именованным кортежем.

Присутствуют следующие значения:

Класс struct_time состоит из следующих атрибутов:

tm_year: возвращает год по местному времени.

tm_hour: возвращает час конкретного местного времени.

tm_min: возвращает значение минут определенного местного времени.

tm_sec: возвращает значение секунд определенного местного времени.

tm_mon: возвращает месяц по местному времени.

tm_mday: возвращает дату месяца по местному времени.

tm_wday: возвращает значение дней недели, т.е. с 0 понедельника по 6 воскресенье.

tm_yday: возвращает номер конкретного дня в диапазоне от 1 до 366.

Вот как этот объект выглядит:

import time текущее_время = time.localtime() print(текущее_время) #Вывод: time.struct_time(tm_year=2021, tm_mon=7, tm_mday=2, tm_hour=8, tm_min=49, tm_sec=4, tm_wday=4, tm_yday=183, tm_isdst=0)

Python time localtime

time.localtime() возвращает значение по местному времени имеющее тип struct_time. Имеет необязательный параметр, указывающий на смещение c начала эпохи.

import time локалтайм_со_смещением_15_секунд = time.localtime(15) print(«Вся структура:», локалтайм_со_смещением_15_секунд) print(«Смещение в секундах:», локалтайм_со_смещением_15_секунд.tm_sec — time.localtime(0).tm_sec) #Вывод: Вся структура: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0) Смещение в секундах: 15

Если в localtime() не предать параметр смещения, то функция вернёт текущее время.

Python time gmtime

gmtime() делает почти то же самое, но значение возвращает UTC.

import time гмтайм_со_смещением_15_секунд = time.gmtime(15) print(«Вся структура:», гмтайм_со_смещением_15_секунд) print(«Смещение в секундах:», гмтайм_со_смещением_15_секунд.tm_sec — time.gmtime(0).tm_sec) текущий_гмтайм = time.gmtime() print(«Текущее время по международному времени:», текущий_гмтайм) #Вывод: Вся структура: time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0) Смещение в секундах: 15 Текущее время по международному времени: time.struct_time(tm_year=2021, tm_mon=7, tm_mday=2, tm_hour=6, tm_min=3, tm_sec=22, tm_wday=4, tm_yday=183, tm_isdst=0)

Читайте также:
Рабочая программа это дидактический материал

Если в time.gmtime () не предать параметр смещения, то функция вернёт значение текущего времени по Гринвичу.

Python time mktime

time.mktime() преобразует структуру времени в секунды формата ОС Unix. Возвращает количество секунд и милисекунд. Является реверсивной по отношению к функции localtime().

import time локалтайм_со_смещением_15_секунд = time.localtime(15) мктайм_со_смещением_15_секунд = time.mktime(локалтайм_со_смещением_15_секунд) print(«Результат функции time.localtime(15):», локалтайм_со_смещением_15_секунд) print(«Результат функции time.mktime(локалтайм_со_смещением_15_секунд):», мктайм_со_смещением_15_секунд) #Вывод: Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0) Результат функции time.mktime(локалтайм_со_смещением_15_секунд): 15.0

Python time asctime

asctime() преобразует tuple или значение типа struct_time, в 24-символьную строку следующей формы – «Thu Jan 1 03:00:00 1970».

import time локалтайм_со_смещением_15_секунд = time.localtime(15) асктайм_со_смещением_15_секунд = time.asctime(локалтайм_со_смещением_15_секунд) print(«Результат функции time.localtime(15):», локалтайм_со_смещением_15_секунд) print(«Результат функции time.asctime(локалтайм_со_смещением_15_секунд):», асктайм_со_смещением_15_секунд) #Вывод: Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0) Результат функции time.asctime(локалтайм_со_смещением_15_секунд): Thu Jan 1 03:00:15 1970

Python time strftime

time.strftime() конвертирует кортеж или объект struct_time, который возвращают time.gmtime() или time.localtime() в значение, имеющее тип стринг и вид, зависящий от переданного аргумента формата.
Когда время не передаётся в аргументы функции, она использует текущее время, которое возвращает localtime() . Формат должен иметь строковый тип.

import time локалтайм_со_смещением_15_секунд = time.localtime(15) стрфтайм_со_смещением_15_секунд = time.strftime(«%m/%d/%Y, %H:%M:%S», локалтайм_со_смещением_15_секунд) print(«Результат функции time.localtime(15):», локалтайм_со_смещением_15_секунд) print(«Результат функции time.strftime(локалтайм_со_смещением_15_секунд):», стрфтайм_со_смещением_15_секунд) #Вывод: Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0) Результат функции time.strftime(локалтайм_со_смещением_15_секунд): 01/01/1970, 03:00:15

Здесь %Y, %m, %d, %H и прочие — это элементы, которыми задаётся форматирование.

%Y — год [0001,…, 2019, 2020,…, 9999]

%m — месяц [01, 02, …, 11, 12]

%d — день месяца в виде десятичного числа [01,31]. %H — час [00, 01, …, 22, 23

%M — минута в виде десятичного числа [00,59]

%S — секунда [00, 01, …, 58, 61]

%a — сокращенное название дня недели

Python time strptime

time.strptime() – обратная по отношению к функции time.strftime(). Она разбирает строку, содержащую время и возвращает struct_time.

import time локалтайм_со_смещением_15_секунд = time.localtime(15) стрфтайм_со_смещением_15_секунд = time.strftime(«%m/%d/%Y, %H:%M:%S», локалтайм_со_смещением_15_секунд) стрптайм_со_смещением_15_секунд = time.strptime(стрфтайм_со_смещением_15_секунд, «%m/%d/%Y, %H:%M:%S») print(«Результат функции time.localtime(15):», локалтайм_со_смещением_15_секунд, sep=’n’) print(«Результат функции time.strftime(локалтайм_со_смещением_15_секунд):», стрфтайм_со_смещением_15_секунд, sep=’n’) print(«Результат функции time.strptime(стрфтайм_со_смещением_15_секунд, ‘%m/%d/%Y, %H:%M:%S’):», стрптайм_со_смещением_15_секунд, sep=’n’) #Вывод: Результат функции time.localtime(15): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=0) Результат функции time.strftime(локалтайм_со_смещением_15_секунд): 01/01/1970, 03:00:15 Результат функции time.strptime(стрфтайм_со_смещением_15_секунд, ‘%m/%d/%Y, %H:%M:%S’): time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=3, tm_min=0, tm_sec=15, tm_wday=3, tm_yday=1, tm_isdst=-1)

Источник: pythoninfo.ru

Работа с датой и временем в Python

Python содержит несколько инструментов, которые разработчик может использовать для работы с датой и временем. В данном разделе статье мы рассмотрим модули datetime и time. Мы изучим принципы их работы и способы их применения. Начнем с модуля datetime.

Модуль datetime

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru