Класс Timer() модуля threading в Python.
Класс Timer() модуля threading создает таймер, который будет запускать функцию function с аргументами args и ключевыми аргументами kwargs по прошествии интервала interval секунд.
Если args равен None (по умолчанию), то будет использоваться пустой список. Если kwargs равен None (по умолчанию), то будет использоваться пустой словарь.
Этот класс представляет действие, которое следует запускать только по прошествии определенного времени — таймер. Таймер является подклассом threading.Thread() и, как таковой, также служит примером создания пользовательских потоков.
Таймеры запускаются, как и потоки, путем вызова их метода Timer.start() , унаследованного от класса threading.Thread() .
Таймер можно остановить до того, как его действие начнется, вызвав метод Timer.cancel() . Интервал, который таймер будет ожидать перед выполнением своего действия, может не совпадать с интервалом, указанным пользователем.
Методы объекта Timer .
Объект Timer дополнительно определяет один метод. Остальные методы он наследует от класса threading.Thread() .
Timer.cancel() :
Метод Timer.cancel() останавливает таймер и отменяет выполнение действия таймера. Метод будет работать только в том случае, если таймер все еще находится в стадии ожидания.
Сработавший таймер остановить нельзя.
Примеры создания и запуска потоков-таймеров.
Таймер начинает свою работу после задержки и может быть отменен в любой момент в течение этого времени задержки.
Второй таймер в этом примере никогда не запускается, а первый таймер запускается после того, как остальная часть основной программы завершена.
Так как первый таймер это не поток демона, то он присоединяется неявно, когда основной поток завершится, по этому delayed() сообщение не напечатает.
How to make a timer program in Python
Here is my goal: To make a small program (text based) that will start with a greeting, print out a timer for how long it has been since the last event, and then a timer for the event. I have used this code to start out with trying to figure out a timer, but my first problem is that the timer keeps repeating on a new line with each new second. How do I get that to stop? Also, this timer seems to lag behind actual seconds on the clock.
12 Answers 12
I would go with something like this:
Here I am relying on actual time module rather than just sleep incrementer since sleep won’t be exactly 1 second.
Also, you can probably use print instead of sys.stdout.write , but you will almost certainly need sys.stdout.flush still.
Note the trailing comma so a new line is not printed.
![]()
This is my version. It’s great for beginners.
I based my timer on user5556486’s version. You can set the duration, and it will beep after said duration ended, similar to Force Fighter’s version
On my PC (Windows 7) when run in a cmd window, this program works almost exactly as you say it should. If the timer is repeating on a new line with each second, that suggests to me that os.system (‘cls’) is not working for you — perhaps because you’re running on an OS other than Windows?
The statement while s<=60: appears to be incorrect because s will never be equal to 60 in that test — anytime it gets to 60, it is reset to 0 and m is incremented. Perhaps the test should be while m<60: ?
Модуль time в Python 3 — таймеры времени
Модуль time в Python 3 обеспечивает доступ к нескольким различным типам, каждые из которых применяются для разных целей. Функция monotonic() может использоваться для измерения прошедшего времени в длительном процессе. Она никогда не уменьшает значение времени, даже если изменяется системное время.
Для тестирования производительности perf_counter() обеспечивает доступ к таймерам с самым высоким дроблением единиц времени для более точного измерения. Время CPU доступно через clock() , а process_time() возвращает комбинированное значение времени процессора и системы.
Обратите внимание
В реализациях представлены функции библиотеки C для управления датами и временем. Поскольку они связаны с базовой реализацией языка C , некоторые элементы ( такие как начало эпохи и максимальное значение даты ) зависят от платформы. Подробную информацию смотрите в документации к библиотеке.
Сравнение часов
Детали реализации таймера возможность которой предоставляет модуль time Python зависят от платформы. Используйте get_clock_info() для получения основной информации о текущей реализации, включая доступную точность часов:
Этот вывод для Mac OS X показывает, что Python time таймеры monotonic и perf_counter реализованы с использованием одного и того же базового системного вызова:
Основной таймер в Python
Одной из функций, которую предоставляет модуль time Python является функция time() , которая возвращает количество секунд с момента начала «эпохи» в виде значения с плавающей запятой:
Эпоха — это начало измерения времени, которым для систем Unix является 0:00 1 января 1970 года. Хотя значение всегда является числом с плавающей запятой, фактическая точность зависит от платформы:
Десятичная дробь полезна при хранении или сравнении дат, но не для создания читаемых человеком представлений. Для регистрации или вывода времени более полезной может оказаться функция ctime() :
Второй вызов print() в этом примере иллюстрирует, как использовать ctime() для форматирования значения времени, которое отличается от текущего:
Таймер относительного времени
Python time() использует системные часы, которые часы могут быть изменены пользовательскими или системными службами для синхронизации часов на нескольких компьютерах. Поэтому повторяющиеся вызовы time() могут давать значения, которые отличаются в большую или в меньшую сторону. Это может привести к неожиданному поведению при попытке измерения промежутка времени.
Избегайте таких ситуаций путем использования функции monotonic() , у которой возвращаемое при повторном вызове значение всегда больше предыдущего:
Начальная точка для относительных таймеров не определена, поэтому возвращаемые значения могут использоваться только для расчетов с другими значениями времени. В этом примере продолжительность спящего режима измеряется с помощью monotonic() :
Таймер процессора
В то время как time() возвращает время основных часов, clock() возвращает время процессора. Для этого можно использовать Python get time .
Значения, возвращаемые функцией clock() , отражают фактическое время, используемое программой при ее запуске:
В этом примере отформатированная ctime() выводится вместе со значениями с плавающей запятой из time() и clock() через цикл для каждой итерации.
Примечание
Если хотите запустить этот код в своей системе, то может потребоваться добавить во внутренний цикл другие циклы или придется работать с большим количеством данных, чтобы увидеть разницу во времени с помощью Python time :
Как правило, часы процессора ничего не засекают, если программа ничего не делает:
В этом примере time sleep python цикл выполняет мало действий, переходя в спящий режим после каждой итерации. Значение time() увеличивается даже тогда, когда приложение находится в спящем режиме, но значение clock() отсутствует:
Вызов sleep() передает управление из текущего потока и указывает ожидать, пока система активирует его. Если программа имеет только один поток, это эффективно блокирует приложение, и оно не работает.
Счетчик производительности
Для измерения производительности важно иметь таймеры monotonic с высокой точностью. Определение наилучшего источника данных синхронизации требует наличия информации о платформе, которую Python предоставляет в perf_counter() :
Как и в случае с функцией Python time monotonic() , эпоха для perf_counter() не определяется. Значения предназначены для сравнения и вычисления, а не в качестве абсолютных значений:
Компоненты времени
Хранимое в виде прошедших секунд время используется в некоторых ситуациях. Но иногда программа должна иметь доступ к отдельным полям даты ( год, месяц и т. д .). Модуль времени определяет struct_time для хранения значений даты и времени с разбитыми компонентами, поэтому они легко доступны. Существует несколько функций, которые работают со значениями struct_time вместо float :
Функция gmtime() , которую предоставляет модуль time Python возвращает текущее время в UTC . Localtime() возвращает текущее время с использованием текущего часового пояса. Mktime() принимает struct_time и преобразует его в формат с плавающей запятой:
Работа с часовыми поясами
Выбор функции для определения текущего времени зависит от того, установлен ли часовой пояс программой или системой. Изменение часового пояса не изменяет фактическое время — только способ его представления.
Чтобы изменить часовой пояс, установите переменную среды TZ , затем вызовите tzset() . Часовой пояс можно указать с различными данными, вплоть до времени начала и завершения периода так называемого « летнего » времени. Проще всего использовать название часового пояса, но базовые библиотеки получают и другую информацию.
Приведенная ниже программа без time sleep python , и задает несколько разных значений для часового пояса и показывает, как изменения влияют на другие настройки в модуле времени:
Часовой пояс по умолчанию для системы, используемой в примерах — US / Eastern . Другие зоны в примере, который позволяет реализовать модуль time Python изменяют значение tzname , продолжительности светового дня и значение смещения часового пояса:
Обработка и форматирование времени
Функции strptime() и strftime() преобразуют struct_time в строковые представления значений времени и наоборот. Существует длинный список инструкций по форматированию для поддержки ввода и вывода в разных форматах. Полный список указан в документации библиотеки для модуля time.
В приведенном ниже примере использования модуля time Python текущее время преобразуется из строки в экземпляр struct_time и обратно в строку:
В примере с time strftime Python строка вывода не такая же, как и входная, так как день месяца имеет префикс с нулем:
Пожалуйста, оставляйте ваши мнения по текущей теме статьи. Мы очень благодарим вас за ваши комментарии, лайки, подписки, дизлайки, отклики!