Тестирование скорости 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это просто разница между двумя датами... так что это как период времени, в днях / секундах / микросекундах>>> 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)это может быть более полезным, чтобы посмотреть на время процессора, а не настенное время, хотя... это операционной однако система зависит ... в Unix-подобных системах проверьте команду "time".
С 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
вы можете использовать модуль timeit вместо.
вы также можете использовать:
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 для времени.часы () против 0.06377 для времени.время()
>>> 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 / Octave в
tictocфункции.пример использования:
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, чтобы отобразить время, однако, делает вас счастливым.
вы можете использовать timeit, как это, чтобы проверить сценарий с именем module.py
$ python -mtimeit -s 'import module'
Comments