Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs
Начиная с этого
занятия, мы с вами познакомимся с основными функциями весьма популярного модуля
time стандартной
библиотеки Python. Этот модуль
содержит следующие основные функции:
|
Функции получения системного времени
|
|
time()
|
время
в секундах, прошедшее с эпохи UNIX (1 января 1970 года)
|
|
monotonic()
|
монотонно
возрастающее время независимо от настроек системных часов (монотонные часы)
|
|
clock()
|
процессорное
время
(устаревшая
функция)
|
|
perf_counter()
|
монотонные
часы с высокой разрешающей способностью
|
|
process_time()
|
время,
потраченное ЦП непосредственно на исполнение программы, исключая периоды
ожидания
|
|
Функции преобразования времени
|
|
localtime()
|
преобразует
время из секунд в структуру struct_time
|
|
mktime()
|
преобразует
время из структуры struct_time в секунды
|
|
gmtime()
|
возвращает
текущее время в виде структуры struct_time
|
|
ctime()
|
преобразует
время из секунд в удобочитаемое строковое представление
|
|
strftime()
|
преобразует
строковое представление времени в структуру struct_time
|
|
strptime()
|
преобразует
структуру struct_time в строковое представление
|
|
Дополнительные функции
|
|
sleep()
|
задержка
выполнения на указанное количество секунд (может быть дробным значением)
|
|
tzset()
|
установка
часового пояса
|
|
get_clock_info()
|
получение
информации о реализации функций работы с временем
|
Рассматривать
эти функции мы будем в порядке удобном для понимания принципов их работы. Сразу
отмечу, что работа многих функций работы со временем зависит от конкретной
платформы (ОС, разрядность процессора и т.п.) и базируются на соответствующих функциях
языка Си, так как интерпретатор Python реализован на
этом языке программирования. Для получения детальной информации можно
воспользоваться функцией get_clock_info(), например, следующим образом:
import time
funcs = [
("time", time.time),
("monotonic", time.monotonic),
("perf_counter", time.perf_counter),
("process_time", time.process_time),
]
for name, func in funcs:
print(f"{name}: {time.get_clock_info(name)}")
print(f"{name}: res = {func()}")
В консоли увидим строчки:
time:
namespace(implementation='GetSystemTimePreciseAsFileTime()', monotonic=False,
adjustable=True, resolution=1e-07)
time:
res = 1756971772.9614265
monotonic:
namespace(implementation='QueryPerformanceCounter()', monotonic=True,
adjustable=False, resolution=1e-07)
monotonic:
res = 97582.0831457
perf_counter:
namespace(implementation='QueryPerformanceCounter()', monotonic=True,
adjustable=False, resolution=1e-07)
perf_counter:
res = 97582.0831619
process_time:
namespace(implementation='GetProcessTimes()', monotonic=True, adjustable=False,
resolution=1e-07)
process_time:
res = 0.03125
Как видите,
разные функции модуля time использую разные
системные функции с разрешающей способностью resolution=1e-07. У вас может
быть другая информация. Все зависит от конкретного железа и ОС. Давайте
разберемся в работе функций модуля time и начнем с
первой функции, которая так и называется time().
Функции time() и ctime()
Эта функция
возвращает время в секундах, прошедшее с начала эпохи UNIX, то есть, с 1
января 1970 года:
import time
t = time.time()
print(t) # 1751950525.9293613
Целая часть
числа показывает секунды, а дробная – миллисекунды. Точность функции time() ограничена разрешающей
способностью ОС и текущего устройства. Обычно современные компьютеры
обеспечивают точность до микросекунд или даже наносекунд, однако гарантированно
поддерживается лишь миллисекундная точность.
Чтобы перевести
это значение в понятную дату для пользователя, можно воспользоваться функцией ctime():
print(time.ctime(t)) # Tue Jul 8 08:57:52 2025
На самом деле
вызов:
res = time.ctime(time.time())
эквивалентен
вызову:
То есть, функция
ctime() возвращает
текущее строковое представление времени, если ей не передается никакого
аргумента. А при указании конкретного времени – строковое представление этого времени.
Например:
t = time.time()
res = time.ctime(t) # передано время t
res2 = time.ctime(t - 100) # время на 100 секунд назад
Возвращаясь к функции
time(), следует
отменить, что она, конечно, ориентируется на системное время, установленное на компьютере.
Если его изменить, то изменится и выдаваемое значение (после изменения
системного времени):
t = time.time() # 1751691723.20975 (Sat Jul 5 09:02:03 2025)
Функцию time() не редко
используют для фактического измерения времени выполнения какого-либо фрагмента
программы. Например, ей можно воспользоваться для определения скорости чтения
данных из файла:
import time
file_path = "start_python.docx"
with open(file_path, "rb") as file:
start_time = time.time()
content = file.read()
end_time = time.time()
size_in_bytes = len(content)
execution_time = end_time - start_time
speed_bps = size_in_bytes / execution_time if execution_time > 0 else float('inf')
print(f"Скорость чтения: {speed_bps:.2f} Б/с")
В консоли увидим
(значение зависит от компьютера):
Скорость чтения:
125077586.04 Б/с
Курс по стандартной библиотеке: https://stepik.org/a/259466?utm_source=proproprogs