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

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

  • автор:

Класс Timer() модуля threading в Python

Класс Timer() модуля threading создает таймер, который будет запускать функцию function с аргументами args и ключевыми аргументами kwargs по прошествии интервала interval секунд.

Если args равен None (по умолчанию), то будет использоваться пустой список. Если kwargs равен None (по умолчанию), то будет использоваться пустой словарь.

Этот класс представляет действие, которое следует запускать только по прошествии определенного времени — таймер. Таймер является подклассом threading.Thread() и, как таковой, также служит примером создания пользовательских потоков.

Таймеры запускаются, как и потоки, путем вызова их метода Timer.start() , унаследованного от класса threading.Thread() .

Таймер можно остановить до того, как его действие начнется, вызвав метод Timer.cancel() . Интервал, который таймер будет ожидать перед выполнением своего действия, может не совпадать с интервалом, указанным пользователем.

def hello(): print("hello, world") t = Timer(30.0, hello) t.start() # через 30 секунд будет напечатано "hello, world". 

Методы объекта Timer .

Объект Timer дополнительно определяет один метод. Остальные методы он наследует от класса threading.Thread() .

Timer.cancel() :

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

Сработавший таймер остановить нельзя.

Примеры создания и запуска потоков-таймеров.

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

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

Так как первый таймер это не поток демона, то он присоединяется неявно, когда основной поток завершится, по этому delayed() сообщение не напечатает.

import threading, time def delayed(): th_name = threading.current_thread().name print(f'Th:th_name> Worker запущен') # Создание и запуск потоков таймеров t1 = threading.Timer(0.3, delayed) t1.name = 'Timer-1' t2 = threading.Timer(0.3, delayed) t2.name = 'Timer-2' print('Запуск таймеров') t1.start() t2.start() print(f'Ожидание перед завершением t2.name>') time.sleep(0.2) print(f'Завершение t2.name>') t2.cancel() print('Выполнено') # Запуск таймеров # Ожидание перед завершением Timer-2 # Завершение Timer-2 # Выполнено # Th:Timer-1 Worker запущен 
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Получение общих сведений о потоках, модуль threading
  • Класс Thread() модуля threading
  • Класс local() модуля threading
  • Класс Event() модуля threading
  • Класс Lock() модуля threading
  • Класс RLock() модуля threading
  • Класс Condition() модуля threading
  • Класс Semaphore() модуля threading
  • Класс Timer() модуля threading
  • Класс Barrier() модуля threading
  • Протокол управления контекстом в модуле threading
  • Трассировка и профилирование потоков модулем threading
  • Как перезапускать потоки?

Секундомер на питоне

Изучаю понемногу Python, решил написать для практики секундомер. Вот он:

import time import os i = 0 while True: time.sleep(1) os.system('clear') i += 1 print(i//3600,(i//60)%60,i%60,sep=':') 

Интересуют несколько вопросов:

  • Как можно сделать простую смену цифр без полной очистки консоли каждую секунду?
  • Как изменить вывод прошедшего времени с 0:1:4 на 00:01:04?
  • Как в целом «причесать» код, где его можно было сделать лучше?

Arandelix
27.04.12 21:54:24 MSK

Насчёт первого посмотри этот тред.

Второе — .rjust(2, ‘0’), .zfill(2) или как в сях: ‘%02d:%02d:%02d’ % (hours, minutes, seconds)

Kalashnikov ★★★
( 27.04.12 22:06:04 MSK )
schizoid ★★★
( 27.04.12 22:23:35 MSK )

учти еще что твой код работает определенное время и суманный sleep 1 + d так что через ceil(1/d) секунд надо прибавить 2 сек вместо 1

bga_ ★★★★
( 27.04.12 23:31:10 MSK )

Разобрался со вторым пунктом, и примерно понял, как решить первый. ‘\r’ возвращает каретку на начало строки, но print переводит её на строку вниз — нужен аналог print, не переводящий строку.

Я правильно понял?

Arandelix
( 27.04.12 23:48:36 MSK ) автор топика
Ответ на: комментарий от bga_ 27.04.12 23:31:10 MSK

[arandelix@NetBook Python]$ time python stopwatch.py 00:00:01 00:00:02 00:00:03 00:00:04 00:00:05 real 0m5.325s user 0m0.297s sys 0m0.023s 

Одна итерация выполняется примерно 65 ms.
Если заменить time.sleep(1) на time.sleep(0.935) погрешность уменьшится?

Arandelix
( 27.04.12 23:56:59 MSK ) автор топика
Ответ на: комментарий от Arandelix 27.04.12 23:48:36 MSK

‘\r’ возвращает каретку на начало строки, но print переводит её на строку вниз — нужен аналог print, не переводящий строку

Можно написать сразу так:

Как сделать так, чтобы секундомер работал только при включенном экране телефона?

Есть простейший секундомер на python:
import time
sec = 0
min = 0
while True:
print(«минут: «,min,»секунд: «,sec)
time.sleep(1)
sec += 1
if sec == 60:
min += 1
sec = 0
Нужно сделать, чтобы этот секундомер работал только если включен дисплей Android смартфона

  • Вопрос задан более трёх лет назад
  • 225 просмотров

6 комментариев

Средний 6 комментариев

Как реализовать простой секундомер?

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

  • Вопрос задан более трёх лет назад
  • 868 просмотров

Комментировать

Решения вопроса 1

swwso1

import time sec = 0 while True: print(sec) time.sleep(1) sec += 1

Ответ написан более трёх лет назад

Комментировать

Нравится 1 Комментировать

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

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