from __future__ import division, print_function import time class Clock(object): def __init__(self): self.last_tick = time.time() def tick(self, framerate): sec_per_frame = 1.0 / framerate diff = time.time() - self.last_tick while diff < sec_per_frame: diff = time.time() - self.last_tick if diff > (1.05 * sec_per_frame): print("WARN: tick is not being called fast enough\n", "target {}, actual {}".format(sec_per_frame, diff)) self.last_tick = time.time() class Show(object): def __init__(self, bridge): self.bridge = bridge self.clock = Clock() self.running = True self.init() def run(self, framerate=40): while self.running: self.update() self.bridge.update() self.clock.tick(framerate) def init(self): """Override me""" raise NotImplementedError def update(self): """Override me""" raise NotImplementedError