这篇文章主要介绍了Python装饰器与线程结合如何提高接口访问效率,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
装饰器的本质是闭包,是python的一种语法糖
def outer(fun): def inner(*args,**kwargs): return fun(*args,**kwargs) return inner # 使用装饰器装饰一下两个函数 @outer def num1(): print('a') @outer def num2(): print('b') if __name__ == '__main__': print(num1.__name__) print(num2.__name__) 以上代码输出结果: inner inner 装饰器的特性:使用自定义的装饰器会改变被装饰函数的函数名,一般装饰器器是不用考虑这一点的,但是如果多个函数被两个装饰器装饰就会报错,因为函数名一样
解决办法:引入 functools.wraps
import functools def outer(fun): @functools.wraps(fun) def inner(*args,**kwargs): return fun(*args,**kwargs) return inner
以上代码输出结果:
num1
num2
定义多线程的装饰器
def async_call(fun): def wrapper(*args, **kwargs): Thread(target=fun, args=args, kwargs=kwargs).start() return wrapper
可以在需要提升效率的接口上添加该装饰器
因为正常来说线程的执行效率要比进程快
可以用装饰器测试并统计函数运行时间
import time def coast_time(func): def fun(*args, **kwargs): t = time.perf_counter() result = func(*args, **kwargs) print(f'func {func.__name__} coast time:{time.perf_counter() - t:.8f} s') return result return fun
这个装饰器有感兴趣的朋友可以保存起来,以后测接口性能可以直接拿过来用!
from time import sleep from time import time import time from threading import Thread #这是统计时间的装饰器 def coast_time(func): def fun(*args, **kwargs): t = time.perf_counter() result = func(*args, **kwargs) print(f'func {func.__name__} coast time:{time.perf_counter() - t:.8f} s') return result return fun #这是创建线程的装饰器,感兴趣的可以保存一下,可以直接使用的 def async_call(fun): def wrapper(*args, **kwargs): Thread(target=fun, args=args, kwargs=kwargs).start() return wrapper @coast_time @async_call def hello(): print('start') sleep(2) print('end') return if __name__ == "__main__": hello()
不创建线程的运行时间是:2s多
使用线程装饰器的时间:0.0003s
可以在引入functools.wraps,防止装饰多个函数的时候,函数名被改变
感谢你能够认真阅读完这篇文章,希望小编分享的“Python装饰器与线程结合如何提高接口访问效率”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。