def elapsed_time(self): """ Get the number of seconds counted so far. """ elapsed_time = 0 if self.resumable: elapsed_time += self.total_time if self.start_time: current_time = monotonic() if self.monotonic else time.time() elapsed_time += current_time - self.start_time return elapsed_time
def __enter__(self): """ Start or resume counting elapsed time. :returns: The :class:`Timer` object. :raises: :exc:`~exceptions.ValueError` when the timer isn't resumable. """ if not self.resumable: raise ValueError("Timer is not resumable!") self.start_time = monotonic() return self
def __exit__(self, exc_type=None, exc_value=None, traceback=None): """ Stop counting elapsed time. :raises: :exc:`~exceptions.ValueError` when the timer isn't resumable. """ if not self.resumable: raise ValueError("Timer is not resumable!") if self.start_time: self.total_time += monotonic() - self.start_time self.start_time = 0.0
def __init__(self, start_time=None, resumable=False): """ Remember the time when the :class:`Timer` was created. :param start_time: The start time (a float, defaults to the current time). :param resumable: Create a resumable timer (defaults to :data:`False`). When `start_time` is given :class:`Timer` uses :func:`time.time()` as a clock source, otherwise it uses :func:`humanfriendly.compat.monotonic()`. """ if resumable: self.monotonic = True self.resumable = True self.start_time = 0.0 self.total_time = 0.0 elif start_time: self.monotonic = False self.resumable = False self.start_time = start_time else: self.monotonic = True self.resumable = False self.start_time = monotonic()