Тестирование скорости Python-разница во времени-миллисекунды
каков правильный способ сравнить 2 раза в Python, чтобы ускорить тестирование раздела кода? Я попытался прочитать документы API. Я не уверен,что понимаю, что такое timedelta.
пока у меня есть этот код:
from datetime import datetime
tstart = datetime.now()
print t1
# code to speed test
tend = datetime.now()
print t2
# what am I missing?
# I'd like to print the time diff here
12 ответов
datetime.timedelta
- это просто разница между двумя datetime-значений ... так что это как период времени, в днях / секундах / микросекундах
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> c = b - a
>>> c
datetime.timedelta(0, 4, 316543)
>>> c.days
0
>>> c.seconds
4
>>> c.microseconds
316543
имейте в виду, что c.microseconds
возвращает только часть микросекунд timedelta! Для целей синхронизации всегда используйте c.total_seconds()
.
вы можете делать все виды математики с datetime.timedelta, например:
>>> c / 10
datetime.timedelta(0, 0, 431654)
было бы более полезно посмотреть на время процессора вместо времени wallclock, хотя ... это операционной однако система зависит ... в Unix-подобных системах проверьте команду "Время".
С Python 2.7 есть timedelta.total_seconds() метод. Итак, чтобы получить истекшие миллисекунды:
>>> import datetime
>>> a = datetime.datetime.now()
>>> b = datetime.datetime.now()
>>> delta = b - a
>>> print delta
0:00:05.077263
>>> int(delta.total_seconds() * 1000) # milliseconds
5077
вы также можете использовать:
import time
start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)
или вы можете использовать профилировщики python.
Я знаю, что это поздно, но я на самом деле очень нравится использовать:
start = time.time()
##### your timed code here ... #####
print "Process time: " + (time.time() - start)
time.time()
дает вам секунды с эпохи. Поскольку это стандартное время в секундах, вы можете просто вычесть время начала из времени окончания, чтобы получить время процесса (в секундах). time.clock()
хорошо для бенчмаркинга, но я нашел его бесполезным, если вы хотите знать, сколько времени занял ваш процесс. Например, гораздо более интуитивно сказать "мой процесс занимает 10 секунд", чем сказать " мой процесс занимает 10 процессорных тактовых блоков"
>>> start = time.time(); sum([each**8.3 for each in range(1,100000)]) ; print (time.time() - start)
3.4001404476250935e+45
0.0637760162354
>>> start = time.clock(); sum([each**8.3 for each in range(1,100000)]) ; print (time.clock() - start)
3.4001404476250935e+45
0.05
в первом примере выше показано время 0.05 для времени.clock () vs 0.06377 для времени.time ()
>>> start = time.clock(); time.sleep(1) ; print "process time: " + (time.clock() - start)
process time: 0.0
>>> start = time.time(); time.sleep(1) ; print "process time: " + (time.time() - start)
process time: 1.00111794472
во втором примере каким-то образом процессорное время показывает "0", хотя процесс проспал секунду. time.time()
правильно показывает чуть более 1 секунды.
следующий код должен отображать время detla...
from datetime import datetime
tstart = datetime.now()
# code to speed test
tend = datetime.now()
print tend - tstart
времени.time () / datetime хорош для быстрого использования, но не всегда на 100% точен. По этой причине мне нравится использовать один из std lib профайлеры (особенно hotshot), чтобы узнать, что к чему.
вы можете посмотреть в разделе профиль модули. Вы получите лучшее чтение из того, где ваши замедления, и большая часть вашей работы будет полностью автоматизирована.
здесь является пользовательской функцией, которая имитирует в среде MATLAB/Октава tic
toc
функции.
пример использования:
time_var = time_me(); # get a variable with the current timestamp
... run operation ...
time_me(time_var); # print the time difference (e.g. '5 seconds 821.12314 ms')
функция :
def time_me(*arg):
if len(arg) != 0:
elapsedTime = time.time() - arg[0];
#print(elapsedTime);
hours = math.floor(elapsedTime / (60*60))
elapsedTime = elapsedTime - hours * (60*60);
minutes = math.floor(elapsedTime / 60)
elapsedTime = elapsedTime - minutes * (60);
seconds = math.floor(elapsedTime);
elapsedTime = elapsedTime - seconds;
ms = elapsedTime * 1000;
if(hours != 0):
print ("%d hours %d minutes %d seconds" % (hours, minutes, seconds))
elif(minutes != 0):
print ("%d minutes %d seconds" % (minutes, seconds))
else :
print ("%d seconds %f ms" % (seconds, ms))
else:
#print ('does not exist. here you go.');
return time.time()
Я не программист Python, но Я знаю, как использовать Google и вот что я нашел: вы используете оператор" -". Для завершения кода:
from datetime import datetime
tstart = datetime.now()
# code to speed test
tend = datetime.now()
print tend - tstart
кроме того, похоже, что вы можете использовать функцию strftime() для форматирования расчета timespan, чтобы отобразить время, однако, делает вас счастливым.
можно использовать как раз все это для проверки скрипта module.py
$ python -mtimeit -s 'import module'