Descubra o tempo que levou para um script python concluir a execução

143

Eu tenho o seguinte código em um script python:

def fun(): 
  #Code here

fun()

Quero executar esse script e também descobrir quanto tempo levou para executar em minutos. Como descubro quanto tempo levou para a execução desse script? Um exemplo seria muito apreciado.

James
fonte
5
Primeiro hit na pesquisa por "sincronização da função python": daniweb.com/software-development/python/code/216610
Piskvor deixou o prédio
Você também pode usar o cProfile . Dá a você a opção de cronometrar cada função separadamente
Adam Rosenthal

Respostas:

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

#do something

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

#Python 3: 
print(datetime.now() - startTime)
Petar Ivanov
fonte
5
Novo no Python, trabalhando em 3.6.1. FYI datetime não tem mais um atributo now.
usar o seguinte código
5
O @WizzleWuzzle datetime.now()funciona se você o fizer from datetime import datetime, não apenas import datetime(apenas confirmado no Python 3.6.4).
Paul Wicking
130

Você executa o script na linha de comando no Linux ou UNIX? Nesse caso, você poderia apenas usar

time ./script.py
Roy
fonte
2
time -p ./script.py -pflag for pipeline
Joy
1
e com o que o pipeline nos ajuda?
ak3191
time python myScript.py para windows A saída será tempo de execução em segundos: 38.509970903396606 real 0m38.792s usuário 0m0.015s sys 0m0.046s
Aryashree Pritikrishna
64
import time
start = time.time()

fun()

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

# python 3
print('It took', time.time()-start, 'seconds.')
AA duplo
fonte
5
A última linha provavelmente deve ser lida print('It took {0:0.1f} seconds'.format(time.time() - start))no python 3.x.
22316 Chris Mueller
3
@ChrisMueller Eu estava trabalhando em python2.7. Deixarei o comentário aqui para que as pessoas possam ver as duas versões.
Double AA
15

O que eu costumo fazer é usar clock()ou time()da timebiblioteca. clockmede o tempo do intérprete, enquanto timemede o tempo do sistema. Advertências adicionais podem ser encontradas nos documentos .

Por exemplo,

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

Ou, alternativamente, você pode usar timeit. Costumo usar a timeabordagem devido à rapidez com que posso divulgá-la, mas se você estiver cronometrando um trecho de código isolado, será timeitútil.

Desde o momento em que documentos ,

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

Em seguida, converter para minutos, você pode simplesmente dividir por 60. Se você deseja que o tempo de execução de script em um formato de fácil leitura, se é segundos ou dias, você pode converter para um timedeltae str-lo:

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

e isso imprimirá algo do formulário [D day[s], ][H]H:MM:SS[.UUUUUU]. Você pode conferir os documentos da timedelta .

E, finalmente, se o que você realmente procura é criar um perfil do seu código, o Python também disponibiliza a biblioteca de perfis .

Darren Yin
fonte
15
import time 

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

O código anterior funciona para mim sem nenhum problema!

Malek B.
fonte
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))
Pavlos Panteliadis
fonte
a impressão por 50 segundos é "0: 0: 50"
htzfun 02/11/19
10

Use o módulo timeit. É muito fácil. Execute o arquivo example.py para que ele fique ativo no Shell Python, agora você poderá chamar sua função no shell. Experimente e verifique se funciona

>>>fun(input)
output

Bom, isso funciona, agora importe timeit e configure um timer

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

Agora, com o cronômetro configurado, podemos ver quanto tempo leva

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

E lá vamos nós, ele lhe dirá quantos segundos (ou menos) foram necessários para executar essa função. Se é uma função simples, você pode aumentá-la para t.timeit (número = 1000) (ou qualquer número!) E depois dividir a resposta pelo número para obter a média.

Eu espero que isso ajude.

Rápido
fonte
0

use os pacotes de hora e data e hora.

se alguém quiser executar esse script e também descobrir quanto tempo levou para executar em minutos

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

O código acima funciona para mim. Eu espero que isso ajude.

thrinadhn
fonte