Несовместимое время выполнения - PullRequest
1 голос
/ 15 января 2020

Я синхронизирую созданную мной функцию и получаю противоречивые результаты. Поскольку я использую 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 Ответ

1 голос
/ 15 января 2020

Я провел тест и получил более последовательные результаты. Я бы предположил, что это связано с ресурсами машины, на которой он работает.

Результат:

1.9347724914550781
1.9128038883209229
1.9010097980499268
1.948140277862549
1.9257290363311768
1.9285156726837158
1.9264476299285889
1.9322516918182373
1.9303538799285889
1.931032419204712
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...