Как сделать таймер python
Перейти к содержимому

Как сделать таймер python

  • автор:

Модуль time в Python 3 — таймеры времени

Модуль time в Python 3 обеспечивает доступ к нескольким различным типам, каждые из которых применяются для разных целей. Функция monotonic() может использоваться для измерения прошедшего времени в длительном процессе. Она никогда не уменьшает значение времени, даже если изменяется системное время.

Для тестирования производительности perf_counter() обеспечивает доступ к таймерам с самым высоким дроблением единиц времени для более точного измерения. Время CPU доступно через clock() , а process_time() возвращает комбинированное значение времени процессора и системы.

Обновлено: 2022-03-16 17:46:47 Вадим Дворников автор материала

Обратите внимание

В реализациях представлены функции библиотеки C для управления датами и временем. Поскольку они связаны с базовой реализацией языка C , некоторые элементы ( такие как начало эпохи и максимальное значение даты ) зависят от платформы. Подробную информацию смотрите в документации к библиотеке.

Сравнение часов

Детали реализации таймера возможность которой предоставляет модуль time Python зависят от платформы. Используйте get_clock_info() для получения основной информации о текущей реализации, включая доступную точность часов:

time_get_clock_info.py import textwrap import time available_clocks = [ ('clock', time.clock), ('monotonic', time.monotonic), ('perf_counter', time.perf_counter), ('process_time', time.process_time), ('time', time.time), ] for clock_name, func in available_clocks: print(textwrap.dedent(''' : adjustable : implementation: monotonic : resolution : current : ''').format( name=clock_name, info=time.get_clock_info(clock_name), current=func()) )

Этот вывод для Mac OS X показывает, что Python time таймеры monotonic и perf_counter реализованы с использованием одного и того же базового системного вызова:

$ python3 time_get_clock_info.py clock: adjustable : False implementation: clock() monotonic : True resolution : 1e-06 current : 0.028399 monotonic: adjustable : False implementation: mach_absolute_time() monotonic : True resolution : 1e-09 current : 172336.002232467 perf_counter: adjustable : False implementation: mach_absolute_time() monotonic : True resolution : 1e-09 current : 172336.002280763 process_time: adjustable : False implementation: getrusage(RUSAGE_SELF) monotonic : True resolution : 1e-06 current : 0.028593 time: adjustable : True implementation: gettimeofday() monotonic : False resolution : 1e-06 current : 1471198232.045526

Основной таймер в Python

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

time_time.py import time print('The time is:', time.time())

Эпоха — это начало измерения времени, которым для систем Unix является 0:00 1 января 1970 года. Хотя значение всегда является числом с плавающей запятой, фактическая точность зависит от платформы:

$ python3 time_time.py The time is: 1471198232.091589

Десятичная дробь полезна при хранении или сравнении дат, но не для создания читаемых человеком представлений. Для регистрации или вывода времени более полезной может оказаться функция ctime() :

$ python3 time_ctime.py The time is : Sun Aug 14 14:10:32 2016 15 secs from now : Sun Aug 14 14:10:47 2016

Второй вызов print() в этом примере иллюстрирует, как использовать ctime() для форматирования значения времени, которое отличается от текущего:

$ python3 time_ctime.py The time is : Sun Aug 14 14:10:32 2016 15 secs from now : Sun Aug 14 14:10:47 2016

Таймер относительного времени

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

Избегайте таких ситуаций путем использования функции monotonic() , у которой возвращаемое при повторном вызове значение всегда больше предыдущего:

time_monotonic.py import time start = time.monotonic() time.sleep(0.1) end = time.monotonic() print('start : 9.2f>'.format(start)) print('end : 9.2f>'.format(end)) print('span : 9.2f>'.format(end - start))

Начальная точка для относительных таймеров не определена, поэтому возвращаемые значения могут использоваться только для расчетов с другими значениями времени. В этом примере продолжительность спящего режима измеряется с помощью monotonic() :

$ python3 time_monotonic.py start : 172336.14 end : 172336.24 span : 0.10

Таймер процессора

В то время как time() возвращает время основных часов, clock() возвращает время процессора. Для этого можно использовать Python get time .

Значения, возвращаемые функцией clock() , отражают фактическое время, используемое программой при ее запуске:

time_clock.py import hashlib import time # Данные, используемые для вычисления контрольной суммы md5 data = open(__file__, 'rb').read() for i in range(5): h = hashlib.sha1() print(time.ctime(), ': '.format( time.time(), time.clock())) for i in range(300000): h.update(data) cksum = h.digest()

В этом примере отформатированная ctime() выводится вместе со значениями с плавающей запятой из time() и clock() через цикл для каждой итерации.

Примечание

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

$ python3 time_clock.py Sun Aug 14 14:10:32 2016 : 1471198232.327 0.033 Sun Aug 14 14:10:32 2016 : 1471198232.705 0.409 Sun Aug 14 14:10:33 2016 : 1471198233.086 0.787 Sun Aug 14 14:10:33 2016 : 1471198233.466 1.166 Sun Aug 14 14:10:33 2016 : 1471198233.842 1.540

Как правило, часы процессора ничего не засекают, если программа ничего не делает:

time_clock_sleep.py import time template = '<> - - ' print(template.format( time.ctime(), time.time(), time.clock()) ) for i in range(3, 0, -1): print('Sleeping', i) time.sleep(i) print(template.format( time.ctime(), time.time(), time.clock()) )

В этом примере time sleep python цикл выполняет мало действий, переходя в спящий режим после каждой итерации. Значение time() увеличивается даже тогда, когда приложение находится в спящем режиме, но значение clock() отсутствует:

$ python3 -u time_clock_sleep.py Sun Aug 14 14:10:34 2016 - 1471198234.28 - 0.03 Sleeping 3 Sun Aug 14 14:10:37 2016 - 1471198237.28 - 0.03 Sleeping 2 Sun Aug 14 14:10:39 2016 - 1471198239.29 - 0.03 Sleeping 1 Sun Aug 14 14:10:40 2016 - 1471198240.29 - 0.03

Вызов sleep() передает управление из текущего потока и указывает ожидать, пока система активирует его. Если программа имеет только один поток, это эффективно блокирует приложение, и оно не работает.

Счетчик производительности

Для измерения производительности важно иметь таймеры monotonic с высокой точностью. Определение наилучшего источника данных синхронизации требует наличия информации о платформе, которую Python предоставляет в perf_counter() :

time_perf_counter.py import hashlib import time # Data to use to calculate md5 checksums data = open(__file__, 'rb').read() loop_start = time.perf_counter() for i in range(5): iter_start = time.perf_counter() h = hashlib.sha1() for i in range(300000): h.update(data) cksum = h.digest() now = time.perf_counter() loop_elapsed = now - loop_start iter_elapsed = now - iter_start print(time.ctime(), ': '.format( iter_elapsed, loop_elapsed))

Как и в случае с функцией Python time monotonic() , эпоха для perf_counter() не определяется. Значения предназначены для сравнения и вычисления, а не в качестве абсолютных значений:

$ python3 time_perf_counter.py Sun Aug 14 14:10:40 2016 : 0.487 0.487 Sun Aug 14 14:10:41 2016 : 0.485 0.973 Sun Aug 14 14:10:41 2016 : 0.494 1.466 Sun Aug 14 14:10:42 2016 : 0.487 1.953 Sun Aug 14 14:10:42 2016 : 0.480 2.434

Компоненты времени

Хранимое в виде прошедших секунд время используется в некоторых ситуациях. Но иногда программа должна иметь доступ к отдельным полям даты ( год, месяц и т. д .). Модуль времени определяет struct_time для хранения значений даты и времени с разбитыми компонентами, поэтому они легко доступны. Существует несколько функций, которые работают со значениями struct_time вместо float :

time_struct.py import time def show_struct(s): print(' tm_year :', s.tm_year) print(' tm_mon :', s.tm_mon) print(' tm_mday :', s.tm_mday) print(' tm_hour :', s.tm_hour) print(' tm_min :', s.tm_min) print(' tm_sec :', s.tm_sec) print(' tm_wday :', s.tm_wday) print(' tm_yday :', s.tm_yday) print(' tm_isdst:', s.tm_isdst) print('gmtime:') show_struct(time.gmtime()) print('nlocaltime:') show_struct(time.localtime()) print('nmktime:', time.mktime(time.localtime()))

Функция gmtime() , которую предоставляет модуль time Python возвращает текущее время в UTC . Localtime() возвращает текущее время с использованием текущего часового пояса. Mktime() принимает struct_time и преобразует его в формат с плавающей запятой:

$ python3 time_struct.py gmtime: tm_year : 2016 tm_mon : 8 tm_mday : 14 tm_hour : 18 tm_min : 10 tm_sec : 42 tm_wday : 6 tm_yday : 227 tm_isdst: 0 localtime: tm_year : 2016 tm_mon : 8 tm_mday : 14 tm_hour : 14 tm_min : 10 tm_sec : 42 tm_wday : 6 tm_yday : 227 tm_isdst: 1 mktime: 1471198242.0

Работа с часовыми поясами

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

Чтобы изменить часовой пояс, установите переменную среды TZ , затем вызовите tzset() . Часовой пояс можно указать с различными данными, вплоть до времени начала и завершения периода так называемого « летнего » времени. Проще всего использовать название часового пояса, но базовые библиотеки получают и другую информацию.

Приведенная ниже программа без time sleep python , и задает несколько разных значений для часового пояса и показывает, как изменения влияют на другие настройки в модуле времени:

time_timezone.py import time import os def show_zone_info(): print(' TZ :', os.environ.get('TZ', '(not set)')) print(' tzname:', time.tzname) print(' Zone : <> (<>)'.format( time.timezone, (time.timezone / 3600))) print(' DST :', time.daylight) print(' Time :', time.ctime()) print() print('Default :') show_zone_info() ZONES = [ 'GMT', 'Europe/Amsterdam', ] for zone in ZONES: os.environ['TZ'] = zone time.tzset() print(zone, ':') show_zone_info()

Часовой пояс по умолчанию для системы, используемой в примерах — US / Eastern . Другие зоны в примере, который позволяет реализовать модуль time Python изменяют значение tzname , продолжительности светового дня и значение смещения часового пояса:

$ python3 time_timezone.py Default : TZ : (not set) tzname: ('EST', 'EDT') Zone : 18000 (5.0) DST : 1 Time : Sun Aug 14 14:10:42 2016 GMT : TZ : GMT tzname: ('GMT', 'GMT') Zone : 0 (0.0) DST : 0 Time : Sun Aug 14 18:10:42 2016 Europe/Amsterdam : TZ : Europe/Amsterdam tzname: ('CET', 'CEST') Zone : -3600 (-1.0) DST : 1 Time : Sun Aug 14 20:10:42 2016

Обработка и форматирование времени

Функции strptime() и strftime() преобразуют struct_time в строковые представления значений времени и наоборот. Существует длинный список инструкций по форматированию для поддержки ввода и вывода в разных форматах. Полный список указан в документации библиотеки для модуля time.

В приведенном ниже примере использования модуля time Python текущее время преобразуется из строки в экземпляр struct_time и обратно в строку:

time_strptime.py import time def show_struct(s): print(' tm_year :', s.tm_year) print(' tm_mon :', s.tm_mon) print(' tm_mday :', s.tm_mday) print(' tm_hour :', s.tm_hour) print(' tm_min :', s.tm_min) print(' tm_sec :', s.tm_sec) print(' tm_wday :', s.tm_wday) print(' tm_yday :', s.tm_yday) print(' tm_isdst:', s.tm_isdst) now = time.ctime(1483391847.433716) print('Now:', now) parsed = time.strptime(now) print('nParsed:') show_struct(parsed) print('nFormatted:', time.strftime("%a %b %d %H:%M:%S %Y", parsed))

В примере с time strftime Python строка вывода не такая же, как и входная, так как день месяца имеет префикс с нулем:

$ python3 time_strptime.py Now: Mon Jan 2 16:17:27 2017 Parsed: tm_year : 2017 tm_mon : 1 tm_mday : 2 tm_hour : 16 tm_min : 17 tm_sec : 27 tm_wday : 0 tm_yday : 2 tm_isdst: -1 Formatted: Mon Jan 02 16:17:27 2017

Как сделать таймер python (для скрипта)

Нужно сделать так чтобы задавался вопрос по типу — «Сколько секунд будет работать скрипт : тут значение в секундах » Потом, запускался таймер, и пока он идет — скрипт начинает работать, когда таймер заканчивается — скрипт выключается, и все по новой. Заранее спасибо Вот скрипт :

import keyboard import time from pynput.mouse import Button, Controller from offset import * mouse = Controller() while True: keyboard.wait("space") while True: time.sleep(0.1) keyboard.press("d") mousde.click(Button.left) if keyboard.is_pressed("F6"): break 

Отслеживать

задан 6 мар 2022 в 18:50

3 1 1 серебряный знак 3 3 бронзовых знака

Запрашиваете количество секунд, добавляете их к текущему времени, получили ожидаемое время завершения. Цикл делаете не True, а пока текущее время меньше требуемого времени завершения

Делаем свой таймер на Python

У нас когда-то был мини-проект: сделать свой таймер-напоминалку, который спрашивает, про что вам напомнить, а потом выдаёт сообщение через нужное время. В прошлый раз мы его сделали на JavaScript, теперь напишем на Python. Потому что Python — это модно, красиво и приятно.

Отличия и особенности

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

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

Есть два способа запустить Python-код:

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

Из минусов — нужно разбираться в параметрах установки и настройки и уметь работать с командной строкой. Плюсы — полный контроль и быстродействие.

2. Использовать онлайн-сервисы, например, этот: onlinegdb.com/online_python_compiler. Работает точно так же — пишете код, нажимаете кнопку Run и смотрите на результат.

Минусы: так как это онлайн-сервис, им пользуется одновременно много человек, поэтому быстродействия от него ждать не стоит. С подключением внешних модулей тоже могут возникнуть проблемы, но с этим можно разобраться, если потратить немного времени.

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

Сейчас мы напишем таймер с оглядкой на онлайновый сервис. А отдельно ещё расскажем об установке.

Исходный код на JavaScript

// Спрашиваем текст напоминания, который нужно потом показать пользователю var text = prompt('О чём вам напомнить?'); // Тут будем хранить время, через которое нужно показать напоминание var time = prompt('Через сколько минут?'); // Чтобы работать со временем в JavaScript, нам нужно перевести его в миллисекунды. Для этого число минут умножаем на 60 тысяч: time = time * 60 * 1000; // Ставим таймер на нужное время с помощью функции setTimeout setTimeout(function () < // Выводим на экран текст напоминания, который хранится в переменной text alert(text); // Привлекаем внимание к окну мигающим заголовком titleAlert(); // В самом конце функции указываем время, через которое она должна сработать >, time);

Что мы здесь сделали:

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

Особенность Python в том, что в нём нет встроенных средств работы с браузером и его вкладками, поэтому помигать заголовком пока не получится. С другой стороны, Python не зависит от браузера, поэтому будем использовать штатные средства ввода и вывода сообщений.

Простая реализация на Python

Самое простое, что можно сделать — поставить программу на паузу на нужное время, а потом вывести сообщение. Для этого подключаем стандартный модуль time — он отвечает за работу со временем.

Модуль в Python — это уже готовый python-файл, где собраны запчасти, которые помогают решать какую-то узкую задачу: функции и классы. Например, замерять время, работать с математическими функциями или календарём.

Чтобы сделать паузу, используют команду time.sleep(). Time — это название модуля, который мы подключили, а sleep — функция, которая находится внутри модуля. Её задача — подождать нужное количество секунд, а потом продолжить выполнение программы.

# Подключаем нужный модуль import time # Спрашиваем текст напоминания, который нужно потом показать пользователю print("О чём вам напомнить?") # Ждём ответа пользователя и результат помещаем в строковую переменную text text = str(input()) # Спрашиваем про время print("Через сколько минут?") # Тут будем хранить время, через которое нужно показать напоминание local_time = float(input()) # Переводим минуты в секунды local_time = local_time * 60 # Ждём нужное количество секунд, программа в это время ничего не делает time.sleep(local_time) # Показываем текст напоминания print(text)

Что дальше: многозадачность и оптимизация

Наша программа уже работает как нужно, но её можно улучшить. Дело в том, что ставить весь код на паузу — не самое удачное решение с точки зрения производительности. Представьте, что вам нужно поставить себе несколько напоминаний на разное время. С таким подходом нам придётся выяснять, какое сработает раньше, потом корректировать время паузы для следующего напоминания и так далее.

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

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.

Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!

Получите ИТ-профессию

В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.

Как сделать таймер для ввода сообщения?

Мне нужно, что бы человеку давалось 5 секунд на то, что бы ввести какой либо текст. Если за 5 секунд он этого не сделает, то выполнение программы должно остановится. Но, программа останавливается только если успеть что либо ввести, при истечении 5 секунд программа продолжает работу.

import asyncio from aioconsole import ainput async def main(): async def input(): x = await ainput() try: await asyncio.wait_for(input(), timeout=5) except asyncio.TimeoutError: print('timeout') loop = asyncio.get_event_loop() loop.run_until_complete(main())
  • Вопрос задан более двух лет назад
  • 310 просмотров

2 комментария

Простой 2 комментария

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

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