Xxvrrr_lxhuangViMax update
24519ea6创建于 2025年10月27日历史提交
import time
from functools import wraps


class Timer:
    def __init__(
        self,
        prefix: str = "Start at {start_time}",
        postfix: str = "End at {end_time}, took {duration} seconds.",
    ):
        self.prefix = prefix
        self.format = format
        self.postfix = postfix

    def __call__(
        self,
        func,
    ):
        @wraps(func)
        async def wrapper(*args, **kwargs):
            start_time = time.time()
            prefix = self.prefix.replace("{start_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(start_time)))
            print(prefix)

            result = await func(*args, **kwargs)

            end_time = time.time()
            duration = end_time - start_time
            postfix = self.postfix.replace("{end_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(end_time))).replace("{duration}", f"{duration:.2f}")
            print(postfix)

            return result

        return wrapper


    def __enter__(self):
        self.start_time = time.time()
        prefix = self.prefix.replace("{start_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.start_time)))
        print(prefix)
        return self


    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_type is not None:
            return False

        end_time = time.time()
        duration = end_time - self.start_time
        postfix = self.postfix.replace("{end_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(end_time))).replace("{duration}", f"{duration:.2f}")
        print(postfix)
        return False





if __name__ == "__main__":
    with Timer(
        prefix="Begin timing at {start_time}",
        postfix="Finished at {end_time}",
    ):
        time.sleep(1)


    @Timer()
    def test_sleep():
        time.sleep(1)

    test_sleep()