Я синхронизирую созданную мной функцию и получаю противоречивые результаты. Поскольку я использую 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)
Редактировать: я тестировал это на своей машине и моей коллеге вчера. Оба дают явно бимодальные результаты. Сегодня результаты нормальные для нас обоих. Мое единственное предположение, что было общесистемное обновление, но мой компьютер не был перезагружен. Если у кого-то есть теория, мне интересно услышать, что может вызвать это на отдельных машинах, а затем остановиться на следующий день на обоих без перезапуска. Отмечаем вопрос как ответивший.