Тестирование скорости 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
660   12  

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 секунды.

вы можете просто распечатать разницу:

print tend - tstart

следующий код должен отображать время 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

    Ничего не найдено.