python - 执行时间不一致
问题描述
我正在计时我创建的函数并得到不一致的结果。由于我使用的是 time.time(),因此我习惯于报告时间的一些小变化,但我的时间数据似乎是双峰的,我不明白。
我的功能:
def sorteddups(listA,listB,key=None, equal=lambda x,y:x==y,greater=lambda x,y:x>y,mode=3):#mode: 0=AB, 1=Aonly, 2=Bonly, 3=[Aonly,Bonly,AB]
A=sorted(listA,key=key)
B=sorted(listB,key=key)
AB=[]
dupA=set()
dupB=set()
j=0
for i,a in enumerate(A):
try:
while greater(a,B[j]):j+=1
if equal(a,B[j]):
AB.append([a,B[j]])
dupA.add(i)
dupB.add(j)
except:pass
if mode==1 or mode==3:Aonly=[a for i,a in enumerate(A) if i not in dupA]
if mode==2 or mode==3:Bonly=[b for i,b in enumerate(B) if i not in dupB]
return AB if mode==0 else Aonly if mode==1 else Bonly if mode==2 else [Aonly,Bonly,AB]
我的结果:
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
0.836998701095581
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
1.2330021858215332
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
1.2690012454986572
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
0.8360021114349365
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
1.2589986324310303
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
0.8310055732727051
>>> t=time()
>>> test3=sorteddups(test,test2)
>>> time()-t
1.2420125007629395
知道什么会导致执行时间的这种双峰分布吗?
编辑:这是您可以运行的一些测试代码:
import random
import string
from time import time
test=[[''.join(random.choice(string.ascii_lowercase) for i in range(150)),[random.randint(1,1000) for _ in range(4)],random.random()] for _ in range(200000)]
test2=test
for _ in range(10):
t=time()
test3=sorteddups(test,test2)
print(time()-t)
编辑:我昨天在我的机器和我的同事机器上测试了这个。两者都产生明显的双峰结果。今天的结果对我们俩来说都是正常的。我唯一的猜测是系统范围的更新,但我的电脑没有重新启动。如果有人有一个理论,我很想知道是什么原因导致这在不同的机器上发生,然后第二天在两台机器上停止而不重新启动。将问题标记为已回答。
解决方案
我进行了测试并得到了更一致的结果。我会假设它与运行它的机器的资源有关。
结果:
1.9347724914550781
1.9128038883209229
1.9010097980499268
1.948140277862549
1.9257290363311768
1.9285156726837158
1.9264476299285889
1.9322516918182373
1.9303538799285889
1.931032419204712
推荐阅读
- c# - 用 Sprache 解析短语(以空格分隔的单词)
- duration - 如何在 splunk 的一个字段中实现值 1 和 0 之间的持续时间的计算?
- javascript - 错误节点 TypeError:无法在发送时读取未定义的属性“请求”
- android - 如何将二维数组从 Kotlin 传输到 C++
- python - 确定 KNN 将样本分类到哪个组
- javascript - 如何更改父div元素中所有子元素的字体大小
- bokeh - 如何实现数据列的客户端计算?
- django - 通过 URL 参数路由数据库
- c# - 如何在加载时将gridview居中并左右滚动以查看所有列?
- ionic-framework - Ionic4 构建 apk 服务 GET 方法不起作用 JSON 中的意外令牌 < 位置 0"