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

Ответ 1

datetime.timedelta - это просто разница между двумя датами... так что это период времени в днях/секундах/микросекундах

>>> import 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)

Возможно, было бы более полезно взглянуть на процессорное время, а не на время настенных часов, хотя... эта операционная система, хотя и зависимая... под Unix-подобными системами, проверьте команду time.

Ответ 2

Так как 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

Ответ 3

Вместо этого вы можете использовать модуль timeit.

Ответ 4

Вы также можете использовать:

import time

start = time.clock()
do_something()
end = time.clock()
print "%.2gs" % (end-start)

Или вы можете использовать профайлы python.

Ответ 5

Я знаю, что уже поздно, но мне действительно нравится использовать:

import time
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 для time.clock() против 0,06377 для time.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 секунды.

Ответ 6

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

print tend - tstart

Ответ 7

Следующий код должен отображать время detla...

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

Ответ 8

Я не программист на Python, но Я знаю, как использовать Google, и вот что я нашел: вы используете "-" оператор. Чтобы завершить код:

from datetime import datetime

tstart = datetime.now()

# code to speed test

tend = datetime.now()
print tend - tstart

Кроме того, похоже, что вы можете использовать функцию strftime() для форматирования расписания времени, чтобы отобразить время, однако делает вас счастливым.

Ответ 9

time.time()/datetime хорош для быстрого использования, но не всегда на 100% точнее. По этой причине я хотел бы использовать один из std lib profilers (особенно hotshot), чтобы узнать, что.

Ответ 10

Возможно, вы захотите изучить модули profile. Вы получите лучшее представление о том, где ваши замедление, и большая часть вашей работы будет полностью автоматизирована.

Ответ 11

Вот пользовательская функция, которая имитирует функции Matlab/Octave 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()

Ответ 12

Вы можете использовать timeit, подобный этому, для тестирования script named module.py

$ python -mtimeit -s 'import module'