import time
class Stopwatch:
""" Counts passed seconds """
def __init__(self):
self.init_time = time.time()
self.seconds = 0
self.last_check = self.init_time
def checkseconds(self):
now = time.time()
count = int(now - self.last_check)
mod = now - self.last_check - count
self.seconds += count
self.last_check = now - mod
Остается периодически дёргать checkseconds созданного экземпляра. Если дёргать с периодичностью меньшей секунды, то значение пройденных секунд будет обновляться ежесекундно.
Работу кода не проверял, но вроде нигде не ошибся. Попробуйте.
Тоже самое, с помощью генераторов:
import time
def stopwatch():
""" Coroutine that returns number of seconds
passed after initialization
"""
# Initialization
init_time = time.time()
seconds = 0
last_check = init_time
# Main loop
while True:
now = yield seconds
count = int(now - last_check)
mod = now - last_check - count
seconds += count
last_check = now - mod
Теперь создаем генератор и, также почаще, посылаем ему настоящее время:
# Создаем сопрограмму
my_watcher = stopwatch()
# Не забываем про инициализацию (первый yield)
my_watcher.send(None)
# Остальные send будут возвращать количество пройденных
# после инициализации секунд
passed_seconds = my_watcher.send(time.time())
<...>
passed_seconds = my_watcher.send(time.time())