#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author(s): xili
# @Created: 2020/6/30 16:13
import functools
import time
import logging
logger = logging.getLogger(__name__)
# 利用装饰器打印日志
def method_metric(func):
@functools.wraps(func)
def wrapper(*args, **kw):
start = time.time()
try:
return func(*args, **kw)
finally:
# 用于统计方法耗时
logger.info('[method {}] cost: {}s, param:{}.'.format(func.__name__, time.time() - start, args))
return wrapper
@method_metric
def test_empty_parameter():
time.sleep(1)
return 1
@method_metric
def test_many_parameter(a_int, b_string, c_list, d_dict):
time.sleep(2)
return 2
@method_metric
def test_key_parameter(a='www', b=1, c=[1, 2]):
time.sleep(3)
return 3
class MetricDemo:
@method_metric
def __init__(self):
time.sleep(1)
print("init test")
if __name__ == "__main__":
logger.setLevel('DEBUG')
ch = logging.StreamHandler()
logger.addHandler(ch)
r1 = test_empty_parameter()
r2 = test_many_parameter(1, 'hello', [1, 2, 'h'], {1: 'a', 2: 'b', 3: 'c', 4: 'd'})
r3 = test_key_parameter(1, 'hello', c=[5, 6])
print(r1)
print(r2)
print(r3)
结果:
[method test_empty_parameter] cost: 1.0063724517822266s, param:().
[method test_many_parameter] cost: 2.0007779598236084s, param:(1, 'hello', [1, 2, 'h'], {1: 'a', 2: 'b', 3: 'c', 4: 'd'}).
[method test_key_parameter] cost: 3.001161575317383s, param:(1, 'hello').
1
2
3