Найдите время, затраченное на выполнение python script для завершения выполнения

У меня есть следующий код в скрипте Python:

def fun(): 
  #Code here

fun()

Я хочу выполнить этот скрипт, а также узнать, сколько времени потребовалось, чтобы выполнить в минутах. Как узнать, сколько времени потребовалось для выполнения этого скрипта? Пример был бы очень признателен.

Ответ 1

from datetime import datetime
startTime = datetime.now()

#do something

#Python 2: 
print datetime.now() - startTime 

#Python 3: 
print(datetime.now() - startTime)

Ответ 2

Выполняется ли script из командной строки в Linux или UNIX? В этом случае вы можете просто использовать

time ./script.py

Ответ 3

import time
start = time.time()

fun()

# python 2
print 'It took', time.time()-start, 'seconds.'

# python 3
print('It took', time.time()-start, 'seconds.')

Ответ 4

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

Ответ 5

import time 

startTime = time.time()
# Your code here !
print ('The script took {0} second !'.format(time.time() - startTime))

Предыдущий код работает для меня без проблем!

Ответ 6

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

Ответ 7

Используйте модуль 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) (или любого числа!), А затем разделить ответ на число, чтобы получить среднее значение.

Надеюсь, это поможет.