Как сделать секундомер в python

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

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

Дальше перечислены самые распространенные функции, связанные со временем.

Python time.time()

Функция time() возвращает число секунд, прошедших с начала эпохи. Для операционных систем Unix 1 января 1970, 00:00:00 (UTC) — начало эпохи (момент, с которого время пошло).

Python time.ctime()

Функция time.ctime() принимает в качестве аргумента количество секунд, прошедших с начала эпохи, и возвращает строку, представляющую собой местное время.

Если запустить программу, то вывод будет выглядеть так:

Python time.sleep()

Функция sleep() откладывает исполнение текущего потока на данное количество секунд.

Прежде чем переходить к другим функциям, связанных со временем, нужно вкратце разобраться с классом time.struct_time .

Класс time.struct_time

Некоторые функции в модуле time , такие как gmtime() , asctime() и другие, принимают объект time.struct_time в качестве аргумента или возвращают его.

Вот пример объекта time.struct_time .

ИндексАтрибутЗначения
0tm_year0000, …, 2019, …, 9999
1tm_mon1, 2, …, 12
2tm_mday1, 2, …, 31
3tm_hour0, 1, …, 23
4tm_min0, 1, …, 59
5tm_sec0, 1, …, 61
6tm_wday0, 1, …, 6; Monday is 0
7tm_yday1, 2, …, 366
8tm_isdst0, 1 or -1

К значениям (элементам) объекта time.struct_time доступ можно получить как с помощью индексов, так и через атрибуты.

Python time.localtime()

Функция localtime() принимает в качестве аргумента количество секунд, прошедших с начала эпохи, и возвращает stuct_time в локальном времени.

Вывод этой программы будет следующим:

Если localtime() передан аргумент None , то вернется значение из time() .

Python time.gmtime()

Функция gmtime() принимает в качестве аргумента количество секунд, прошедших с начала эпохи и возвращает struct_time в UTC.

Вывод этой программы будет следующим:

Если gmtime() передан аргумент None , то вернется значение time() .

Python time.mktime()

Функция mktime() принимает struct_time (или кортеж, содержащий 9 значений, относящихся к struct_time ) в качестве аргумента и возвращает количество секунд, прошедших с начала эпохи, в местном времени. Это функция, обратная localtime() .

Следующий пример показывает, как связаны mktime() и localtime() .

Вывод будет следующий:

Python time.asctime()

Функция asctime() принимает struct_time (или кортеж, содержащий 9 значений, относящихся к struct_time ) в качестве аргумента и возвращает строку, представляющую собой дату.

Python time.strftime()

Функция strftime принимает stuct_time (или соответствующий кортеж) в качестве аргумента и возвращает строку с датой в зависимости от использованного формата. Например:

Вывод будет следующий:

Здесь %Y , %m , %d , %H и другие — элементы форматирования.

  • %Y — год [0001,…, 2019, 2020,…, 9999]
  • %m — месяц [01, 02, …, 11, 12]
  • %d — день [01, 02, …, 30, 31]
  • %H — час [00, 01, …, 22, 23
  • %M — минута [00, 01, …, 58, 59]
  • %S — секунда [00, 01, …, 58, 61]

Python time.strptime()

Функция strptime() делает разбор строки python, в которой упоминается время и возвращает struct_time .

В этом руководстве рассказывается, как создать таймер обратного отсчета в Python.

Код принимает ввод того, как долго должен быть обратный отсчет, и начинает обратный отсчет сразу после ввода ввода.

Использование модуля time и функции sleep() для создания таймера обратного отсчета в Python

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

Если ваша программа однопоточная, как в этом руководстве, то функция sleep() остановит выполнение всей программы до тех пор, пока не будет достигнуто заданное время. Благодаря этому, наряду с подтвержденным пользовательским вводом, мы можем создать простой таймер обратного отсчета в Python.

Первое, что нужно сделать, это импортировать модуль time для использования функции sleep() .

Затем объявите функцию, которая будет работать как таймер обратного отсчета. Назовем эту функцию countdown() . Функция принимает единственный параметр: количество секунд ( num_of_secs ), до которого будет отсчитывать таймер.

Переменная num_of_secs будет непрерывно уменьшаться в цикле, пока не достигнет 0 (что переводится в False и завершает цикл без каких-либо дополнительных условий).

Внутри цикла отформатируйте входную переменную num_of_secs в формат MM:SS и распечатайте ее каждый раз, когда она уменьшается. Для этого используйте встроенную функцию Python divmod() , которая принимает два числа и возвращает произведение и остаток от двух чисел соответственно. Затем отформатируйте результат кортежа divmod() в формат MM:SS с помощью встроенной строковой функции format() .

форматирует аргумент в 2-значное целое число (из-за символа 02d ). Если целое число меньше двух цифр, к нему добавляются ведущие 0 .

Затем при каждой итерации цикла вызывайте time.sleep(1) , что означает, что каждая итерация откладывается на 1 секунду и будет продолжаться по истечении.

Перед вызовом функции sleep() распечатайте отформатированную строку, напоминающую формат MM:SS текущего значения входной переменной num_of_secs .

Кроме того, добавьте еще один аргумент в функцию print() со свойством end и значением /r , который представляет собой новую строку для имитации поведения реального таймера. Этот аргумент перезаписывает предыдущий вывод print() каждый раз при выполнении цикла, перезаписывая все до того, как возврат каретки обозначен символом /r .

После этого уменьшите входную переменную min_sec_format на 1 после выполнения всех предыдущих строк.

Наконец, распечатайте заключительный оператор вне цикла, который означает, что таймер завершил выполнение. Он завершает метод countdown() и будет работать как таймер обратного отсчета.

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

Перехватите ввод в переменную и используйте его в качестве аргумента для функции обратного отсчета. Обязательно приведите входную переменную к int для проверки.

Весь код должен выглядеть так:

Окончательный результат будет отображать Countdown finished , но будет имитировать работу таймера и очищать каждую строку print() , пока не достигнет 00:00 .

Итак, если вы введете 5 секунд, трассировка стека будет выглядеть так:

Вот и все. Теперь вы успешно создали простой таймер обратного отсчета в Python, используя только встроенные функции и функцию sleep() из модуля time .

Сопутствующая статья - Python Timer


report this ad

Я пытаюсь создать простую игру, в которой нужно собрать столько блоков, сколько вы можете за определенное время, скажем, 10 секунд. Как я могу получить секундомер, чтобы начать тикать в начале программы, и когда он достигнет 10 секунд, сделайте что-нибудь (в этом случае выйдите из цикла)?

В качестве альтернативы, если вы уже получили свой цикл:

Этот метод хорошо работает с pygame, так как он в значительной степени требует, чтобы у вас был большой основной цикл.

В Python 3.3+ time.monotonic() может быть полезен, чтобы избежать некоторых проблем планирования времени .

valueH = (valueD-days)*365 с синтаксической ошибкой со ссылкой на Days в строке valueH = (valueD-days)*365

Использование time.time()/datetime.datetime.now() будет прерываться, если системное время будет изменено (пользователь изменяет время, он корректируется службами синхронизации времени, такими как NTP или переключение с/на дневное время сбережения!).

time.monotonic() или time.perf_counter(), кажется, правильный путь, однако они доступны только из python 3.3. Другая возможность - использование threading.Timer. Независимо от того, является ли это более надежным, чем time.time(), а друзья зависят от внутренней реализации. Также обратите внимание, что создание нового потока не является полностью бесплатным с точки зрения системных ресурсов, поэтому это может быть плохой выбор в случаях, когда много таймеров нужно запускать параллельно.

Время идет шумно, поэтому time.time работает достаточно хорошо, ему это не нужно идеально, иначе он сказал бы, что мое время должно быть . . 1 идеально или что-то еще. Время 10 секунд - время. Время достаточно.

Время будет отключено на один час при переходе на летнее время и обратно и может быть запущено назад. А что, если системное время изменилось? Как, черт возьми, это "достаточно точно"?

Объект threading.Timer (документация) может подсчитать десять секунд, затем установите его, чтобы установить флаг Event, указывающий, что цикл должен выйти.

Документация указывает, что время может быть неточным - вам нужно будет проверить, достаточно ли он достаточно для вашей игры.

Если мы хотим задержать выполнение функции на определенное время, мы можем использовать класс python timer. start() и cancel () – это два его метода.

Python имеет тысячи модулей и библиотек для удовлетворения потребностей программиста. Однако, чтобы сделать их полезными, вы должны сначала понять их, а затем применить. Без предварительного знания определенных модулей неясно, что вы хотите сделать и что на самом деле делает модуль. Время-один из важных факторов в задачах кодирования. Все коды предназначены для того, чтобы уменьшить работу человека, используя свои мощные алгоритмы. Тайм-менеджмент оказывает большое влияние на анализ производительности вашего кода. Вот почему сегодня мы подробно узнаем о том, как работает таймер в Python.

Python Timer-это класс/библиотека для управления временной сложностью вашего кода. Используя несколько временных модулей, вы можете создать систему в своем коде, чтобы проверить время, затраченное соответствующим фрагментом кода. Существуют различные типы реализаций таймера в python в соответствии с потребностями пользователя, а именно функция таймера python (для проверки времени выполнения скрипта), таймер потоковой передачи python (для проверки времени, затраченного потоком на завершение), таймер обратного отсчета python (создание таймера обратного отсчета) и базовый модуль времени python (для помощи в других действиях).

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

Основные Функции Таймера Python

Ниже приведены основные функции таймера Python, использующие модуль time –

  • time.time()
  • time.thread_time()
  • time.process_time()
  • time.perf_counter()
  • time.monotonic()

Функция time.time

time.time() возвращает время в секундах (float) после эпохи. Как правило, эпоха устанавливается на январь 1, 1970, 00:00:00 (UTC), и возвращается количество секунд после этой эпохи. Эта функция зависит от времени компьютера для вычисления количества секунд. Если вы измените компьютерное время между выполнением python, вы можете получить странные числа, используя эту функцию.

Во-первых, мы начинаем с импорта модуля времени. Этот модуль содержит все основные функции времени, которые мы будем использовать в этом разделе. В начале кода мы объявим переменную start как time.time(). Это сохранит текущее время процессора в float number из эпохи. Мы будем использовать эту начальную переменную в качестве ориентира для измерения времени. Следующая часть содержит все коды, которые вы хотите использовать (В этом примере мы использовали циклы for).Аналогично, запишите время окончания работы процессора (время по умолчанию) и проверьте общее время выполнения с помощью end – start.

Это выведет время, затраченное кодом в секундах. С помощью этой техники вы можете проверить время, затраченное вашим кодом. Единственная проблема с этим методом заключается в том, что процессорное время может быть изменено во время выполнения кода. Это приведет к проблемному поведению в python timer.

Функциональное время.Thread_time

time.thread_time() возвращает сумму системного и процессорного времени (float) в текущем запущенном потоке. Более того, он не включает в себя время, которое вы проводите в функции time.sleep(). Поскольку функция зависит от потока, вы можете использовать эту функцию для записи временных различий до тех пор, пока ссылки на время принадлежат одному и тому же потоку.

Поскольку thread_time возвращает специфичное для потока время, мы должны убедиться, что используем ссылки в том же потоке . Для этого мы создали экземпляр потока функции ‘hello’ и рассчитали время, затраченное потоком внутри него. Однако убедитесь, что вы не можете получить текущее время, вызвав thread_time() , поскольку он возвращает дробное значение.Но вы определенно можете проверить разницу между двумя последовательными ссылками, если они принадлежат одному потоку.

Функциональное время.Process_time

time.process_time() возвращает ссылку на время в дробных секундах (float) суммы системного времени и процессорного времени текущего прогресса. Как и thread_time, эта функция не измеряет время, проведенное в функции time.sleep(). Более того, эта функция создает ссылку на основе процесса. As в результате этого будет иметь смысл только разница во времени между двумя последовательными ссылками.

Мы начинаем с импорта функции process_time и записываем время начала и окончания между кодом. Единственное различие между устаревшими time.time() и time.process_time() заключается в том, что processing time записывает временные ссылки текущего процесса, тогда как time() записывает абсолютное время системы.

Время работы.Perf_counter

Perf Counter расшифровывается как Performance Counter. Эта функция возвращает значение с высоким разрешением времени, которое является действительным в течение короткого периода времени. Эта функция используется для получения точного отсчета времени между двумя ссылками. Поскольку другие функции таймера python не включают время сна, perf_counter также не включает его. Давайте перейдем к примеру –

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

Функция времени.монотонная

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

Сначала мы импортируем монотонную функцию из модуля времени. Затем создайте две ссылки с именами start и end в верхней и нижней части кода. Это позволит измерить время между двумя ссылками и избежать всех внешних изменений системного времени.

Пользовательские Классы таймера Python

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

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

Начнем с импорта модуля времени. Затем инициализируйте класс таймера python и начните определять атрибуты и методы. До сих пор мы включали только базовый атрибут, чтобы сохранить начальную ссылку класса. Чтобы сделать его более сложным, вы можете создать несколько атрибутов. На данный момент существует три метода, перечисленных ниже –

  1. start – (Необязательно) Чтобы запустить таймер.
  2. log – Регистрировать текущее прошедшее время относительно времени начала.
  3. milestone – Сбросить таймер и начать его отсчет с 0.

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

Таймер Python с использованием потоковой передачи

Когда мы хотим выполнить какую-то операцию или хотим, чтобы наша функция выполнялась через определенное время, мы используем класс Python Timer. Класс timer является подклассом класса threading. Технически можно сказать, что мы создаем объекты таймера, когда хотим, чтобы действия (функции) были ограничены временем.

Например, предположим, что мы хотим организовать викторину, где участник должен ответить на каждый вопрос за 10 секунд. Здесь мы можем создать таймер, который будет работать в фоновом режиме, а тем временем участник будет думать над ответом. Теперь давайте разберемся, как создать объект timer .

Синтаксис класса Timer в Python

Если вы не поняли, что делает класс Timer, вы можете думать об этом следующим образом – Класс Timer вызывает функцию через заданное количество секунд.

Чтобы запустить таймер, нам нужно вызвать start()(как и обычные потоки), а чтобы остановить таймер, пока он все еще находится в фоновом режиме, мы можем вызвать cancel().

Чтобы использовать класс Timer, нам нужно импортировать класс threading

Параметры-

Интервал– Время (в секундах), которое вы хотите подождать перед вызовом следующей функции. Он может быть либо в float, либо в integer. Например, в течение 3 секунд.

Функция – Функция, которую вы хотите вызвать через указанный промежуток времени.

Распространенным способом описания параметров *args и **kwargs является- создание объекта таймера, который запускает функцию с аргументами’ args’ и аргументами ключевых слов’ kwargs’ после того, как прошли интервальные секунды. Args должны быть в виде списка и ключевого слова args или kwargs в виде словаря .

Тип возврата-

Он просто вызывает функцию, указанную в параметрах.

Методы в классе Timer

  1. start() – Это означает начало выполнения таймера.
  2. Cancel ()– Во время выполнения таймера мы можем вызвать функцию cancel, если хотим остановить его ().

Создание объекта таймера

а. Понимание основ

Чтобы понять, как работает объект Timer, давайте создадим небольшую программу, которая поможет нам понять основы класса.

б. Использование метода отмены

Давайте посмотрим, как использовать функцию cancel() класса Timer.

c. Как использовать параметр ‘args’ класса python timer

Когда нам нужно дать аргументы функции, которую нужно вызвать, мы используем параметр args. Мы должны дать аргумент args в массиве.

Теперь, когда мы много говорили о времени, в качестве бонуса давайте сделаем программу, которая будет действовать как таймер обратного отсчета.

Таймер обратного отсчета в python

Использование модуля времени

Использование класса python Timer

Таймеры Python как контекстные менеджеры

Контекстные менеджеры-это лучший способ избежать ошибок памяти и последующих сбоев. Все должны были знать о “with” заявлении в Python. Это утверждение гарантирует, что нам не нужно заботиться о том, чтобы многие объекты закрывались независимо. Каждый мог бы использовать его с комбинацией функций with и open(). Итак, переходя к главному вопросу, можем ли мы создать контекстные менеджеры для таймеров Python?

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

Мы начинаем с создания класса с именем “Timer_Python pool.” Затем мы настраиваем операторы, чтобы сделать их полезными в качестве контекстного менеджера. __enter__ функция выполняется в начале контекста, а __exit__ выполняется в конце контекста. Создание точки отсчета между этими двумя функциями может дать вам точное время, необходимое контексту для выполнения.

Python Timer Decorators

Декораторы-это дополнительная поддержка для любого вида функций. Также называемый метапрограммированием, вы можете изменить/добавить к нему функциональность. Python Timer Decorators-это самый простой способ реализации функций таймера в python. После объявления вы можете использовать декораторы в одной строке, даже не зная их. Кроме того, вы можете применить их к каждой функции в вашем коде, чтобы проверить, какой код занимает больше всего времени для выполнения.

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

Как обычно, мы начинаем с импорта самого важного модуля из python “time.” Затем мы создаем декоратор с именем “check_time.” Внутри него мы добавляем вложенную внутреннюю функцию, где мы можем создавать ссылки на время. Эти две ссылки расположены так, что обе они находятся между выполнением функции.

Далее мы создаем тестовую функцию с именем “задача”, чтобы проверить, работает ли наша задача. Затем добавьте сверху декоратора. Как декоратор будет творить свою магию и печатать время, затраченное функцией.

Перезарядка таймера Python

Python Timer Cooldown-это способ измерения таймера в обратном направлении. Создавая пользовательский класс таймера, мы можем регистрировать время в каждой точке вашего кода. Вы можете экспортировать этот класс как модуль и установить его как зависимость в своем коде. Затем, используя одну строку, вы можете импортировать ее –

Другие Модули Таймера Python

Python содержит тысячи модулей и миллионы фрагментов кода. Мы всегда можем использовать модули с открытым исходным кодом для использования таймеров python. Github-это самое большое место для поиска таких модулей. Давайте сразу перейдем к этим модулям –

  1. term down: Продвинутый таймер python, созданный с использованием различных символов ASCII. Используя этот скрипт, вы можете создать простой таймер обратного отсчета в вашем терминале и выполнить команду в конце. Самое главное, что он имеет поддержку голосового обратного отсчета.
  2. MobTimer.Python: Таймер на основе графического интерфейса, созданный на python. Этот скрипт создает полноэкранные таймеры с несколькими опциями. Наряду с этим, вы можете запускать несколько раз на вашем экране одновременно с помощью этой программы.
  3. timer: Это самый простой таймер на основе графического интерфейса, созданный на python (Tkinter). Такие функции, как несколько таймеров, меток и многопоточность, делают его более жизнеспособным по сравнению с другими программами.
  4. code timing: Этот класс таймера записывает все ваши прошлые времена выполнения для определенного именованного процесса. Вы можете проверить минимальное время, максимальное время, среднее время и среднее время для конкретного процесса вместе с записями. Этот модуль можно использовать несколькими способами, а именно как контекстный менеджер и как декоратор.
  5. cTimer: crime-это таймер с точностью до наносекунды в python. Этот модуль использует API языка c для точной записи времени. Если вы ищете хардкорные модули точной записи времени, то это самый лучший вариант. (Примечание: В последних обновлениях python модуль time добавлен с функциями записи времени в наносекундах)

Должен Читать:

  • Как преобразовать строку в нижний регистр в
  • Как вычислить Квадратный корень
  • Пользовательский ввод | Функция ввода () | Ввод с клавиатуры
  • Лучшая книга для изучения Python

Вывод

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

И последнее, но не менее важное: таймер – это подкласс класса threading в python. Если мы хотим запустить какую-либо функцию через определенный промежуток времени, мы можем использовать класс python timer. В параметре args, который по умолчанию равен None, мы можем указать аргументы, которые мы хотим передать методу обратного вызова .

Попробуйте запустить программы на вашей стороне и дайте нам знать, если у вас есть какие-либо вопросы.

Читайте также: