Узнайте, сколько времени понадобилось скрипту Python для завершения выполнения - PullRequest
120 голосов
/ 22 июля 2011

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

def fun(): 
  #Code here

fun()

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

Ответы [ 7 ]

220 голосов
/ 22 июля 2011
from datetime import datetime
startTime = datetime.now()

#do something

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

#Python 3: 
print(datetime.now() - startTime)
113 голосов
/ 22 июля 2011

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

time ./script.py
51 голосов
/ 22 июля 2011
import time
start = time.time()

fun()

print 'It took', time.time()-start, 'seconds.'
14 голосов
/ 22 июля 2011

Обычно я использую clock() или time() из библиотеки time. clock измеряет время переводчика, а time измеряет системное время. Дополнительные замечания можно найти в документах .

Например,

def fn():
    st = time()
    dostuff()
    print 'fn took %.2f seconds' % (time() - st)

Или же вы можете использовать timeit. Я часто использую подход time из-за того, как быстро я могу справиться с этим, но если вы рассчитываете фрагмент кода, способный изолировать, вам пригодится timeit.

Из документов timeit ,

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. Если вы хотите, чтобы время выполнения скрипта было легко читаемым, будь то секунды или дни, вы можете преобразовать его в timedelta и str it:

runtime = time() - st
print 'runtime:', timedelta(seconds=runtime)

и это распечатает что-то вроде [D day[s], ][H]H:MM:SS[.UUUUUU]. Вы можете ознакомиться с документами timedelta .

И, наконец, если то, что вы на самом деле ищете, профилирует ваш код, Python также предоставляет библиотеку профилей .

13 голосов
/ 12 января 2016
import time 

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

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

11 голосов
/ 08 февраля 2017
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))
10 голосов
/ 16 ноября 2012

Используйте модуль timeit. Это очень просто. Запустите файл example.py, чтобы он был активен в оболочке Python, и теперь вы сможете вызывать свою функцию в оболочке. Попробуйте, чтобы проверить, работает ли

>>>fun(input)
output

Хорошо, это работает, теперь импортируйте время и установите таймер

>>>import timeit
>>>t = timeit.Timer('example.fun(input)','import example')
>>>

Теперь у нас настроен таймер, и мы можем видеть, сколько времени это займет

>>>t.timeit(number=1)
some number here

Итак, мы сообщим вам, сколько секунд (или меньше) потребовалось для выполнения этой функции. Если это простая функция, вы можете увеличить ее до t.timeit (число = 1000) (или любое число!), А затем разделить ответ на число, чтобы получить среднее значение.

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

...