Spaces:
Runtime error
Runtime error
| # Copyright (c) OpenMMLab. All rights reserved. | |
| from time import time | |
| class TimerError(Exception): | |
| def __init__(self, message): | |
| self.message = message | |
| super(TimerError, self).__init__(message) | |
| class Timer: | |
| """A flexible Timer class. | |
| :Example: | |
| >>> import time | |
| >>> import annotator.uniformer.mmcv as mmcv | |
| >>> with mmcv.Timer(): | |
| >>> # simulate a code block that will run for 1s | |
| >>> time.sleep(1) | |
| 1.000 | |
| >>> with mmcv.Timer(print_tmpl='it takes {:.1f} seconds'): | |
| >>> # simulate a code block that will run for 1s | |
| >>> time.sleep(1) | |
| it takes 1.0 seconds | |
| >>> timer = mmcv.Timer() | |
| >>> time.sleep(0.5) | |
| >>> print(timer.since_start()) | |
| 0.500 | |
| >>> time.sleep(0.5) | |
| >>> print(timer.since_last_check()) | |
| 0.500 | |
| >>> print(timer.since_start()) | |
| 1.000 | |
| """ | |
| def __init__(self, start=True, print_tmpl=None): | |
| self._is_running = False | |
| self.print_tmpl = print_tmpl if print_tmpl else '{:.3f}' | |
| if start: | |
| self.start() | |
| def is_running(self): | |
| """bool: indicate whether the timer is running""" | |
| return self._is_running | |
| def __enter__(self): | |
| self.start() | |
| return self | |
| def __exit__(self, type, value, traceback): | |
| print(self.print_tmpl.format(self.since_last_check())) | |
| self._is_running = False | |
| def start(self): | |
| """Start the timer.""" | |
| if not self._is_running: | |
| self._t_start = time() | |
| self._is_running = True | |
| self._t_last = time() | |
| def since_start(self): | |
| """Total time since the timer is started. | |
| Returns (float): Time in seconds. | |
| """ | |
| if not self._is_running: | |
| raise TimerError('timer is not running') | |
| self._t_last = time() | |
| return self._t_last - self._t_start | |
| def since_last_check(self): | |
| """Time since the last checking. | |
| Either :func:`since_start` or :func:`since_last_check` is a checking | |
| operation. | |
| Returns (float): Time in seconds. | |
| """ | |
| if not self._is_running: | |
| raise TimerError('timer is not running') | |
| dur = time() - self._t_last | |
| self._t_last = time() | |
| return dur | |
| _g_timers = {} # global timers | |
| def check_time(timer_id): | |
| """Add check points in a single line. | |
| This method is suitable for running a task on a list of items. A timer will | |
| be registered when the method is called for the first time. | |
| :Example: | |
| >>> import time | |
| >>> import annotator.uniformer.mmcv as mmcv | |
| >>> for i in range(1, 6): | |
| >>> # simulate a code block | |
| >>> time.sleep(i) | |
| >>> mmcv.check_time('task1') | |
| 2.000 | |
| 3.000 | |
| 4.000 | |
| 5.000 | |
| Args: | |
| timer_id (str): Timer identifier. | |
| """ | |
| if timer_id not in _g_timers: | |
| _g_timers[timer_id] = Timer() | |
| return 0 | |
| else: | |
| return _g_timers[timer_id].since_last_check() | |