这是时间代码速度的正确方法吗?



我想测量代码中主要函数的速度,我编写了以下代码:

with open(filename + '.speed.csv', 'w') as f:
f.write('resultttimettextn')
for index, text in enumerate(textlines):
#print(index)
# 1. Start to time
start = time.time()
doc = bnlu.nlps(text, enable = enable)
tags = defaultdict(set)
if 'tag' in doc:
for tag_id, tag_info_list in doc['wb_tag'].items():
for tag_info in tag_info_list:
id = tag_id
name = tag_info[1]
weight = tag_info[2]
pattern_str = tag_info[4]
tag_str = '(' + id + ' ' + name + ' ' + pattern_str + ' ' + str(weight) + ')'
tags[id].add(tag_str)
# 2. End to time
end = time.time()
time_1 = str(end-start)

f.write(str(tags) + 't' + time_1 + 't' + text + 'n')
# End to time 2
end2 = time.time()
time2 = end2-start
print(time2)

耗时的代码是这一部分:

doc = bnlu.nlps(text, enable = enable)

所以我的time_1是用来度量这一部分,而time_2是用来度量将每一行的结果写入文件所花费的时间比time_1多还是少。

这是衡量代码速度的正确方法吗?在生成的csv文件中,第二列包含算法处理的每个文本行所花费的时间。

同时,time_1和time_2都是毫秒,对吗?在我的输出中,这些数字非常小,如下所示:

0.002065896987915039
0.002288341522216797
0.0019719600677490234
0.002459287643432617
0.0019350051879882812
0.002561807632446289
0.0022737979888916016
0.0026137828826904297
0.0020627975463867188
0.01592111587524414
0.001967191696166992
0.009980916976928711
0.007891178131103516
0.0022401809692382812
0.0035669803619384766
0.0030107498168945312
0.002779722213745117
0.0027618408203125
0.0019371509552001953
0.0025129318237304688
0.0023632049560546875
0.0022687911987304688

这是否意味着最后一个只有0.00226毫秒?它看起来很可疑,因为它太快了。是第二吗?

使用timeit https://docs.python.org/3/library/timeit.html,例如:

def foo():
return "hello"
timeit.timeit(foo,number=10)

其中number为时间测量的重复次数。

最新更新