返回 ViMax
timer.py
根目录 / utils / timer.py
1 import time
2 from functools import wraps
3
4
5 class Timer:
6 def __init__(
7 self,
8 prefix: str = "Start at {start_time}",
9 postfix: str = "End at {end_time}, took {duration} seconds.",
10 ):
11 self.prefix = prefix
12 self.format = format
13 self.postfix = postfix
14
15 def __call__(
16 self,
17 func,
18 ):
19 @wraps(func)
20 async def wrapper(*args, **kwargs):
21 start_time = time.time()
22 prefix = self.prefix.replace("{start_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(start_time)))
23 print(prefix)
24
25 result = await func(*args, **kwargs)
26
27 end_time = time.time()
28 duration = end_time - start_time
29 postfix = self.postfix.replace("{end_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(end_time))).replace("{duration}", f"{duration:.2f}")
30 print(postfix)
31
32 return result
33
34 return wrapper
35
36
37 def __enter__(self):
38 self.start_time = time.time()
39 prefix = self.prefix.replace("{start_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(self.start_time)))
40 print(prefix)
41 return self
42
43
44 def __exit__(self, exc_type, exc_val, exc_tb):
45 if exc_type is not None:
46 return False
47
48 end_time = time.time()
49 duration = end_time - self.start_time
50 postfix = self.postfix.replace("{end_time}", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(end_time))).replace("{duration}", f"{duration:.2f}")
51 print(postfix)
52 return False
53
54
55
56
57
58 if __name__ == "__main__":
59 with Timer(
60 prefix="Begin timing at {start_time}",
61 postfix="Finished at {end_time}",
62 ):
63 time.sleep(1)
64
65
66 @Timer()
67 def test_sleep():
68 time.sleep(1)
69
70 test_sleep()
70 lines PYTHON