Python装饰器与线程结合提高接口访问效率方法
回顾装饰器的基本用法
装饰器的本质是闭包,是python的一种语法糖
def outer(fun):def inner(*args,**kwargs):return fun(*args,**kwargs)return inner# 使用装饰器装饰一下两个函数@outerdef num1():print('a')@outerdef num2():print('b')if __name__ == '__main__':print(num1.__name__)print(num2.__name__)以上代码输出结果:innerinner装饰器的特性:使用自定义的装饰器会改变被装饰函数的函数名,一般装饰器器是不用考虑这一点的,但是如果多个函数被两个装饰器装饰就会报错,因为函数名一样
解决办法:引入 functools.wraps
import functoolsdef 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 timedef 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 resultreturn fun
这个装饰器有感兴趣的朋友可以保存起来,以后测接口性能可以直接拿过来用!
from time import sleepfrom time import timeimport timefrom 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 resultreturn fun#这是创建线程的装饰器,感兴趣的可以保存一下,可以直接使用的def async_call(fun):def wrapper(*args, **kwargs):Thread(target=fun, args=args, kwargs=kwargs).start()return wrapper@coast_time@async_calldef hello():print('start')sleep(2)print('end')returnif __name__ == "__main__":hello()
不创建线程的运行时间是:2s多
使用线程装饰器的时间:0.0003s
可以在引入functools.wraps,防止装饰多个函数的时候,函数名被改变
【Python装饰器与线程结合提高接口访问效率方法】以上就是Python装饰器与线程结合提高接口访问效率方法的详细内容,更多关于Python提高接口访问效率的资料请关注脚本之家其它相关文章!
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 人生感悟记#环境仪器宋庆国成长记#072
- python学习之|python学习之 实现QQ自动发送消息
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 视频转换器哪种好用()
- Python基础|Python基础 - 练习1
- NeuVector 会是下一个爆款云原生安全神器吗()