Какие методы из библиотеки time существуют в Python
Что проверяют
Знаете ли вы модуль шире, чем time.time() и time.sleep(), и понимаете ли, где заканчивается time и начинается datetime. Следом обычно спрашивают, чем perf_counter() отличается от time() и как работать с часовыми поясами.
Как отвечать
Удобнее всего сгруппировать функции по задачам:
- текущее время:
time.time()отдаёт секунды от эпохи Unix (1 января 1970 года, UTC) числом float,time.time_ns()то же в целых наносекундах; - замер интервалов:
monotonic(),perf_counter(),process_time(),thread_time(). Первые две монотонны и не прыгают, когда переводят системные часы; - пауза:
time.sleep(secs)блокирует текущий поток. С Python 3.5 сон не обрывается сигналом, если обработчик не бросил исключение (PEP 475). В асинхронном коде вместо негоawait asyncio.sleep(), иначе встанет весь event loop; - преобразования:
gmtime()иlocaltime()превращают секунды вstruct_timeв UTC и в локальном поясе,mktime()делает обратное для локального времени, для UTC обратную операцию даётcalendar.timegm(); - форматирование и разбор:
strftime(format, t)иstrptime(string, format)с кодами вида%Y-%m-%d %H:%M:%S; - пояс процесса:
time.timezone,time.tznameиtime.tzset(), последняя есть только на Unix.
Дальше покажите, где модуль заканчивается. struct_time не хранит доли секунды, арифметики дат в time нет, из часовых поясов доступен только системный. Для прикладной работы берут datetime вместе с zoneinfo (он в стандартной библиотеке с Python 3.9), а time остаётся для таймеров, пауз и низкоуровневых меток.
Где спотыкаются
Меряют длительность через time.time(). Синхронизация по NTP или ручная правка часов даёт кривые и даже отрицательные интервалы, для этого есть perf_counter().
Зовут time.sleep() внутри async def. Корутина не отдаёт управление циклу, и все остальные задачи стоят, пока она спит.
Вспоминают time.clock(), которую удалили в Python 3.8, или путают localtime() с gmtime(). На сервере, где системный пояс UTC, а у разработчика локальный, это даёт сдвиг на несколько часов, который замечают только в проде.