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

вы можете использовать модуль 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 для времени.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 секунды.


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

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/Октава 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'