python教程,如何利用装饰器功能计算函数运行时间?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
计算函数运行时间的问题,就是为了解决效率问题。不同的方案总是有不同的运行时间消耗的。那么,如何量化的考察某个函数的运行时间消耗呢?思路就是在开始运行的时候,计算个时间,结束的时候,再计算个时间。两者相减就是需求方案了。本文的解决思路,是把上述思路包装成一个python
的装饰器,然后就可以批量调用了。
苏南大叔的“程序如此灵动”技术博客,记录苏南大叔的代码经验。本文测试环境:win10
,python@3110
,gensim@4.3.2
。
本文龙套
本文的龙套角色,来自于上一篇文章。因为加载语料库和进行向量计算,都是非常耗时的。所以,用作本文的龙套角色标的物,非常合适。
龙套一,使用.txt
文件。
file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.txt'
model = KeyedVectors.load_word2vec_format(file, binary=False)
龙套二,使用.bin
文件。
file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.bin'
model = KeyedVectors.load_word2vec_format(file, binary=True)
装饰器
在以前的文章里面,苏南大叔对python
的装饰器功能做过很细致的探讨和描述。参考文章:
- https://newsn.net/say/python-def.html
- https://newsn.net/say/python-decorators.html
- https://newsn.net/say/python-decorators-2.html
- https://newsn.net/say/python-decorators-3.html
- https://newsn.net/say/python-decorators-4.html
- https://newsn.net/say/python-decorators-5.html
- https://newsn.net/say/python-decorators-6.html
事实上,平时也用不到那么高大上的功能。下面的代码就是本文的主角,计时用的装饰器:
import time
def performance(func):
def fun(*args,**kwargs):
t = time.perf_counter()
result = func(*args,**kwargs)
print(f'函数 {func.__name__} 运行时间:{time.perf_counter() - t:.8f} 秒')
return result
return fun
计时对比
那么,对比开始:
from gensim.models import KeyedVectors
import os
os.chdir(os.path.dirname(__file__))
import time
def performance(func):
def fun(*args,**kwargs):
t = time.perf_counter()
result = func(*args,**kwargs)
print(f'函数 {func.__name__} 运行时间:{time.perf_counter() - t:.8f} 秒')
return result
return fun
@performance
def sim_txt():
file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.txt'
model = KeyedVectors.load_word2vec_format(file, binary=False)
s = model.similarity("北京","唐山")
# print(s)
@performance
def sim_bin():
file = './tencent-ailab-embedding-zh-d100-v0.2.0-s.bin'
model = KeyedVectors.load_word2vec_format(file, binary=True)
s = model.similarity("北京","唐山")
# print(s)
sim_txt()
sim_bin()
结果输出:
函数 sim_txt 运行时间:171.60744600 秒
函数 sim_bin 运行时间:15.10192990 秒
结论是:使用.bin
文件进行计算的话,会更加快一些,速度快十一倍。
结束语
其实,“使用装饰器对函数计时”是苏南大叔上学的时候的一个作业题,哈哈哈。更多python
经验文章,请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。