Узнать время, которое потребовалось скрипту Python для завершения выполнения


147

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

def fun(): 
  #Code here

fun()

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


5
Первое попадание в поисковый запрос
Писквор покинул здание

Вы также можете использовать cProfile . Дает вам возможность рассчитать время для каждой функции отдельно
Адам Розенталь,

Ответы:


272
from datetime import datetime
startTime = datetime.now()

#do something

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

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

6
Новичок в Python, работает в 3.6.1. FYI datetime больше не имеет атрибута now.
WizzleWuzzle

6
@WizzleWuzzle datetime.now()работает, если вы это делаете from datetime import datetime, а не только import datetime(только что подтверждено на Python 3.6.4).
Пол Уикинг,

133

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

time ./script.py

2
time -p ./script.py -pфлаг для трубопровода
Joy

3
и в чем нам помогает пайплайн?
ak3191

1
time python myScript.py для Windows Результатом будет время выполнения в секундах: 38.509970903396606 real 0m38.792s user 0m0.015s sys 0m0.046s
Aryashree Pritikrishna

67
import time
start = time.time()

fun()

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

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

5
Последнюю строку, вероятно, следует читать print('It took {0:0.1f} seconds'.format(time.time() - start))в python 3.x.
Крис Мюллер

3
@ChrisMueller Я работал в python2.7. Я оставлю комментарий здесь, чтобы люди могли увидеть обе версии.
Double AA,

15

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

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

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

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


15
import time 

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

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


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

распечатка за 50 секунд: «0: 0: 50»
htzfun

10

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

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


1

используйте пакеты time и datetime.

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

import time
from time import strftime
from datetime import datetime 
from time import gmtime

def start_time_():    
    #import time
    start_time = time.time()
    return(start_time)

def end_time_():
    #import time
    end_time = time.time()
    return(end_time)

def Execution_time(start_time_,end_time_):
   #import time
   #from time import strftime
   #from datetime import datetime 
   #from time import gmtime
   return(strftime("%H:%M:%S",gmtime(int('{:.0f}'.format(float(str((end_time-start_time))))))))

start_time = start_time_()
# your code here #
[i for i in range(0,100000000)]
# your code here #
end_time = end_time_()
print("Execution_time is :", Execution_time(start_time,end_time))

У меня работает приведенный выше код. Надеюсь, это поможет.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.