Spaces:
Sleeping
Sleeping
| import time | |
| import logging | |
| import numbers | |
| import datetime | |
| def _to_timestamp(val, multiplier=1, rounded=False): | |
| if val is None: | |
| timestamp = time.time() | |
| elif isinstance(val, numbers.Real): | |
| timestamp = float(val) | |
| elif isinstance(val, time.struct_time): | |
| timestamp = time.mktime(val) | |
| elif isinstance(val, datetime.datetime): | |
| timestamp = val.timestamp() | |
| elif isinstance(val, datetime.date): | |
| dt = datetime.datetime.combine(val, datetime.time()) | |
| timestamp = dt.timestamp() | |
| elif isinstance(val, str): | |
| try: | |
| # The full format looks like 'YYYY-MM-DD HH:MM:SS.mmmmmm'. | |
| dt = datetime.datetime.fromisoformat(val) | |
| timestamp = dt.timestamp() | |
| except: | |
| raise TypeError('when argument is str, it should conform to isoformat') | |
| else: | |
| raise TypeError('unsupported type!') | |
| timestamp = timestamp * multiplier | |
| if rounded: | |
| # The return value is an integer if ndigits is omitted or None. | |
| timestamp = round(timestamp) | |
| return timestamp | |
| def get_timestamp(time_val=None, rounded=True): | |
| """timestamp in seconds. | |
| """ | |
| return _to_timestamp(time_val, multiplier=1, rounded=rounded) | |
| def get_timestamp_ms(time_val=None, rounded=True): | |
| """timestamp in milliseconds. | |
| """ | |
| return _to_timestamp(time_val, multiplier=1000, rounded=rounded) | |
| def get_timestamp_us(time_val=None, rounded=True): | |
| """timestamp in microseconds. | |
| """ | |
| return _to_timestamp(time_val, multiplier=1000000, rounded=rounded) | |
| def get_utc8now() -> datetime.datetime: | |
| """get current UTC-8 time or Beijing time | |
| """ | |
| tz = datetime.timezone(datetime.timedelta(hours=8)) | |
| utc8now = datetime.datetime.now(tz) | |
| return utc8now | |
| class ContextTimer(object): | |
| """ | |
| References: | |
| WithTimer in https://github.com/uber/ludwig/blob/master/ludwig/utils/time_utils.py | |
| """ | |
| def __init__(self, name=None, use_log=False, quiet=False): | |
| self.use_log = use_log | |
| self.quiet = quiet | |
| if name is None: | |
| self.name = '' | |
| else: | |
| self.name = '{}, '.format(name.rstrip()) | |
| def __enter__(self): | |
| self.start_time = time.time() | |
| if not self.quiet: | |
| self._print_or_log('{}{} starts'.format(self.name, self._now_time_str)) | |
| return self | |
| def __exit__(self, exc_type, exc_val, exc_tb): | |
| if not self.quiet: | |
| self._print_or_log('{}elapsed_time = {:.5}s'.format(self.name, self.get_eplased_time())) | |
| self._print_or_log('{}{} ends'.format(self.name, self._now_time_str)) | |
| def _now_time_str(self): | |
| return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()) | |
| def _print_or_log(self, output_str): | |
| if self.use_log: | |
| logging.info(output_str) | |
| else: | |
| print(output_str) | |
| def get_eplased_time(self): | |
| return time.time() - self.start_time | |
| def enter(self): | |
| """Manually trigger enter""" | |
| self.__enter__() | |