Ответ 1
from datetime import datetime
startTime = datetime.now()
#do something
#Python 2:
print datetime.now() - startTime
#Python 3:
print(datetime.now() - startTime)
У меня есть следующий код в скрипте Python:
def fun():
#Code here
fun()
Я хочу выполнить этот скрипт, а также узнать, сколько времени потребовалось, чтобы выполнить в минутах. Как узнать, сколько времени потребовалось для выполнения этого скрипта? Пример был бы очень признателен.
from datetime import datetime
startTime = datetime.now()
#do something
#Python 2:
print datetime.now() - startTime
#Python 3:
print(datetime.now() - startTime)
Выполняется ли script из командной строки в Linux или UNIX? В этом случае вы можете просто использовать
time ./script.py
import time
start = time.time()
fun()
# python 2
print 'It took', time.time()-start, 'seconds.'
# python 3
print('It took', time.time()-start, 'seconds.')
Обычно я использую clock()
или time()
из библиотеки time
. clock
измеряет время интерпретатора, а time
измеряет системное время. Дополнительные оговорки можно найти в docs.
Например,
def fn():
st = time()
dostuff()
print 'fn took %.2f seconds' % (time() - st)
Или, альтернативно, вы можете использовать timeit
. Я часто использую подход time
из-за того, как быстро я могу его отключить, но если вы хотите выделить фрагмент кода, пригодный для изоляции, timeit
пригодится.
Из timeit docs,
def test():
"Stupid test function"
L = []
for i in range(100):
L.append(i)
if __name__=='__main__':
from timeit import Timer
t = Timer("test()", "from __main__ import test")
print t.timeit()
Затем, чтобы преобразовать в минуты, вы можете просто делить на 60. Если вы хотите, чтобы среда выполнения script находилась в легко читаемом формате, независимо от того, сколько секунд или дней, вы можете преобразовать в timedelta
и str
его:
runtime = time() - st
print 'runtime:', timedelta(seconds=runtime)
и это напечатает что-то из формы [D day[s], ][H]H:MM:SS[.UUUUUU]
. Вы можете проверить timedelta docs.
И, наконец, если вы на самом деле выполняете профилирование своего кода, Python также предоставляет
import time
startTime = time.time()
# Your code here !
print ('The script took {0} second !'.format(time.time() - startTime))
Предыдущий код работает для меня без проблем!
import sys
import timeit
start = timeit.default_timer()
#do some nice things...
stop = timeit.default_timer()
total_time = stop - start
# output running time in a nice format.
mins, secs = divmod(total_time, 60)
hours, mins = divmod(mins, 60)
sys.stdout.write("Total running time: %d:%d:%d.\n" % (hours, mins, secs))
Используйте модуль timeit. Это очень легко. Запустите файл example.py, чтобы он был активным в оболочке Python, теперь вы можете вызвать свою функцию в оболочке. Попробуйте проверить работу.
>>>fun(input)
output
Хорошо, что работает, теперь импортируйте timeit и настройте таймер
>>>import timeit
>>>t = timeit.Timer('example.fun(input)','import example')
>>>
Теперь у нас установлен наш таймер, мы можем видеть, сколько времени требуется
>>>t.timeit(number=1)
some number here
И мы пойдем, он расскажет вам, сколько секунд (или меньше) потребовалось для выполнения этой функции. Если это простая функция, вы можете увеличить ее до t.timeit(number = 1000) (или любого числа!), А затем разделить ответ на число, чтобы получить среднее значение.
Надеюсь, это поможет.