from functools import wraps
from line_profiler import LineProfiler as lpf
from time import time, sleep
import datetime
class Decorator:
@classmethod
def timer(cls, tag=""):
"""
代码计时器
:param tag: 标签
:return: 注解代码
"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time()
print('=' * 20 + '> {}.{} start:{} <'.format(tag, func.__name__,
datetime.datetime.now()) + '=' * 20 + '\n')
result = func(*args, **kwargs)
end = time()
print('\n[TIME] {}.{} use time:{:.2f} seconds\n'.format(tag, func.__name__, end - start))
print('=' * 20 + '> {}.{} end:{} <'.format(tag, func.__name__,
datetime.datetime.now()) + '=' * 20 + '\n\n')
return result
return wrapper
return decorator
@classmethod
def line_profile(cls):
"""
逐行分析运行次数和运行时间
:return: 被注解的函数
"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
profiler = lpf(func)
profiler.enable()
result = func(*args, **kwargs)
profiler.disable()
profiler.print_stats()
return result
return wrapper
return decorator
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
start = time()
print('=' * 20 + '>{} start:{} <'.format(func.__name__,
datetime.datetime.now()) + '=' * 20 + '\n')
result = func(*args, **kwargs)
end = time()
print('\n[TIME] {} use time:{:.2f} seconds\n'.format(func.__name__, end - start))
print('=' * 20 + '> {} end:{} <'.format(func.__name__,
datetime.datetime.now()) + '=' * 20 + '\n\n')
return result
return wrapper
@Decorator.timer()
# @decorator
def fun_test():
sleep(3)
print(8988)
if __name__ == '__main__':
fun_test()
总耗时运行结果:
每行耗时结果: