Eu tenho um programa de linha de comando em Python que demora um pouco para terminar. Quero saber o tempo exato que leva para terminar a corrida.
Eu olhei para o timeit
módulo, mas parece que é apenas para pequenos trechos de código. Eu quero cronometrar o programa inteiro.
round(time.time() - start_time, 2)
(ou qualquer decimal que você quiser), eu estava recebendo números científicos de volta como 1,24e-5.'%.2f'
vez deround()
aqui.Coloquei este
timing.py
módulo no meu própriosite-packages
diretório e apenas insiraimport timing
na parte superior do meu módulo:Também posso ligar
timing.log
de dentro do meu programa se houver etapas significativas dentro do programa que eu queira mostrar. Mas apenas incluirimport timing
imprimirá os horários de início e término e o tempo decorrido geral. (Perdoe minhasecondsToStr
função obscura , ela apenas formata um número de ponto flutuante de segundos no formato hh: mm: ss.sss.)Nota: Uma versão Python 3 do código acima pode ser encontrada aqui ou aqui .
fonte
from functools import reduce
no topo e coloque colchetes em cada declaração de impressão. Funciona bem!No Linux ou Unix:
No Windows, consulte esta pergunta do StackOverflow: Como faço para medir o tempo de execução de um comando na linha de comando do Windows?
Para uma saída mais detalhada,
fonte
secondsToStr()
função.Eu realmente gosto da resposta de Paul McGuire , mas uso o Python 3. Então, para aqueles que estão interessados: aqui está uma modificação de sua resposta que funciona com o Python 3 no * nix (imagino, no Windows, que
clock()
deve ser usado em vez detime()
):Se você achar isso útil, você deve votar novamente a resposta dele em vez desta, como ele fez a maior parte do trabalho;).
fonte
timedelta(seconds=t).total_seconds()
útil.time.clock()
retorna o tempo do processador, o que nos permite calcular apenas o tempo usado por esse processo (no Unix de qualquer maneira). A documentação diz "em qualquer caso, esta é a função a ser usada para comparar Python ou algoritmos de tempo"fonte
Gosto da saída que o
datetime
módulo fornece, onde objetos de tempo delta mostram dias, horas, minutos etc., conforme necessário, de maneira legível por humanos.Por exemplo:
Saída de amostra, por exemplo
ou
Como JF Sebastian mencionou, essa abordagem pode encontrar alguns casos complicados com a hora local, portanto, é mais seguro usar:
fonte
timedelta(seconds=time.monotonic()-start)
aqui (outime.time()
se o intervalo for grande). Não subtraia objetos de data e hora ingênuos que representam a hora local; a hora local não é monótonastart_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time)
. Confio que você está certo, mas também é necessário formatá-lo quando voltardatetime.timedelta(0, 0, 76)
. Além disso, parece que o método monótona só foi adicionado em Python 3.str()
para torná-lo "humano". Vou atualizar a resposta, obrigado.Você pode usar o profiler do Python cProfile para medir o tempo da CPU e, adicionalmente, quanto tempo é gasto dentro de cada função e quantas vezes cada função é chamada. Isso é muito útil se você deseja melhorar o desempenho do seu script sem saber por onde começar. Essa resposta para outra pergunta do Stack Overflow é muito boa. É sempre bom dar uma olhada na documentação também .
Aqui está um exemplo de como criar um perfil de script usando cProfile em uma linha de comando:
fonte
X function calls in Y CPU seconds
. Se você quiser a hora do relógio de parede, use uma das outras respostas aqui.Ainda melhor para Linux:
time
fonte
Rélogio de ponto()
time.perf_counter ()
time.process_time ()
fonte
Basta usar o
timeit
módulo. Funciona com o Python 2 e o Python 3.Ele retorna em segundos e você pode ter seu tempo de execução. É simples, mas você deve escrevê-los na função principal que inicia a execução do programa. Se você deseja obter o tempo de execução mesmo quando receber um erro, leve o parâmetro "Iniciar" para ele e calcule como:
fonte
finally
parte?O trecho a seguir imprime o tempo decorrido em um bom
<HH:MM:SS>
formato legível por humanos .fonte
fonte
No IPython , "timeit" qualquer script:
fonte
Ele executa a
your_module.main()
função uma vez e imprime o tempo decorrido usando atime.time()
função como um temporizador.Para emular
/usr/bin/time
no Python, consulte o subprocesso do Python com / usr / bin / time: como capturar informações de tempo, mas ignorar todas as outras saídas? .Para medir o tempo da CPU (por exemplo, não inclua o tempo durante
time.sleep()
) para cada função, você pode usar oprofile
módulo (cProfile
no Python 2):Você pode passar
-p
para otimeit
comando acima se quiser usar o mesmo timer queprofile
módulo usa.Consulte Como você pode criar um perfil de um script Python?
fonte
Também gostei da resposta de Paul McGuire e criei um formulário de gerenciamento de contexto que se adequava mais às minhas necessidades.
fonte
Para o pessoal de dados que usa Jupyter Notebook
Em uma célula, você pode usar o
%%time
comando mágico do Jupyter para medir o tempo de execução:Resultado
Isso capturará apenas o tempo de execução de uma célula específica. Se você deseja capturar o tempo de execução de todo o notebook (ou seja, programa), é possível criar um novo notebook no mesmo diretório e, no novo notebook, executar todas as células:
Suponha que o notebook acima seja chamado
example_notebook.ipynb
. Em um novo notebook no mesmo diretório:Resultado
fonte
Existe um
timeit
módulo que pode ser usado para cronometrar os tempos de execução do código Python.Possui documentação e exemplos detalhados na documentação do Python, 26.6. timeit - Mede o tempo de execução de pequenos trechos de código .
fonte
timeit
na pergunta. A questão é como ela pode ser usada aqui (ou deve ser usada aqui e quais são as alternativas). Aqui está a resposta possível .Use line_profiler .
line_profiler analisará o tempo que as linhas de código individuais levam para serem executadas. O criador de perfil é implementado em C via Cython , a fim de reduzir a sobrecarga da criação de perfil.
Os resultados serão:
fonte
Eu usei uma função muito simples para cronometrar uma parte da execução do código:
E, para usá-lo, basta chamá-lo antes do código para medir a recuperação do tempo da função e depois chamar a função após o código com comentários. A hora aparecerá na frente dos comentários. Por exemplo:
Então a saída ficará assim:
fonte
Eu estava tendo o mesmo problema em muitos lugares, então criei um pacote de conveniência
horology
. Você pode instalá-lopip install horology
e fazê-lo da maneira elegante:irá produzir:
Ou ainda mais simples (se você tiver uma função):
irá produzir:
Ele cuida de unidades e arredondamentos. Funciona com python 3.6 ou mais recente.
fonte
main.interval
.Esta é a resposta de Paul McGuire que funciona para mim. Apenas no caso de alguém estar tendo problemas para executar esse.
Ligue
timing.main()
do seu programa depois de importar o arquivo.fonte
Timeit é uma classe em Python usada para calcular o tempo de execução de pequenos blocos de código.
Default_timer é um método nesta classe que é usado para medir o tempo do relógio de parede, não o tempo de execução da CPU. Portanto, outra execução de processo pode interferir nisso. Portanto, é útil para pequenos blocos de código.
Uma amostra do código é a seguinte:
fonte
timeit
é a melhor resposta da IMO para muitas instâncias.Resposta mais tarde, mas eu uso
timeit
:code_to_test
.number
O argumento especifica a quantidade de vezes que o código deve repetir.fonte
O tempo da medida de execução de um programa Python pode ser inconsistente, dependendo de:
Isso ocorre porque a maneira mais eficaz é usar a "Ordem de crescimento" e aprender a notação "O" grande para fazê-lo corretamente.
De qualquer forma, você pode tentar avaliar o desempenho de qualquer programa Python em etapas específicas de contagem de máquinas por segundo usando este algoritmo simples: adapte isso ao programa que deseja avaliar
fonte
Você faz isso simplesmente em Python. Não há necessidade de complicar.
fonte
Semelhante à resposta do @rogeriopvl, adicionei uma pequena modificação para converter em hora minuto segundos usando a mesma biblioteca para trabalhos de longa execução.
Saída de amostra
fonte
Primeiro, instale humanamente pacote , abrindo o prompt de comando (CMD) como administrador e digite lá -
pip install humanfriendly
Código:
Resultado:
fonte
Para usar a resposta atualizada do metakermit para o Python 2.7, você precisará do código monotônico pacote .
O código seria então o seguinte:
fonte
Tentei e encontrei a diferença de horário usando os seguintes scripts.
fonte
Se você deseja medir o tempo em microssegundos, pode usar a seguinte versão, baseada completamente nas respostas de Paul McGuire e Nicojo - é o código Python 3. Também adicionei um pouco de cor:
log () => função que imprime as informações de tempo.
txt ==> primeiro argumento a ser registrado e sua string para marcar o tempo.
atexit ==> módulo Python para registrar funções que você pode chamar quando o programa sair.
fonte