Qual é o melhor para usar no timing no Python? time.clock () ou time.time ()? Qual fornece mais precisão?
por exemplo:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
é preterido e é recomendável usáperf_counter()
-loprocess_time()
.timeit.default_timer()
para medir o desempenho (que é atribuído a time.time () ou time.clock () dependendo OS) .time.clock
etime.process_time
, mas os processos filhos não. Veja também esta discussão sobre precisão (é claro, varia de acordo com o sistema).Respostas:
A partir do 3.3, o time.clock () está obsoleto e é sugerido o uso de time.process_time () ou time.perf_counter () .
Anteriormente na 2.7, de acordo com os documentos do módulo de tempo :
Além disso, existe o módulo timeit para comparações de snippets de código.
fonte
time.clock()
foi dependente da plataforma, etime.process_time()
não é. Esta é a razão pela qualtime.clock()
foi preterido.A resposta curta é: na maioria das vezes
time.clock()
será melhor. No entanto, se você estiver cronometrando algum hardware (por exemplo, algum algoritmo que você coloca na GPU), eletime.clock()
se livra desse tempo etime.time()
é a única solução que resta.Nota: qualquer que seja o método usado, o tempo dependerá de fatores que você não pode controlar (quando o processo mudará, com que frequência ...), isso é pior com,
time.time()
mas também existe comtime.clock()
, portanto, você nunca deve executar apenas um teste de tempo, mas sempre execute uma série de testes e observe a média / variação dos tempos.fonte
Outros responderam re:
time.time()
vs.time.clock()
.No entanto, se você estiver programando a execução de um bloco de código para fins de comparação / criação de perfil, dê uma olhada no
timeit
módulo .fonte
timeit.default_timer
é atribuídotime.time()
outime.clock()
depende do SO. No Python 3.3+default_timer
estátime.perf_counter()
em todas as plataformas.Uma coisa a ter em mente: alterar a hora do sistema afeta,
time.time()
mas nãotime.clock()
.Eu precisava controlar algumas execuções de testes automáticos. Se uma etapa do caso de teste levasse mais de um determinado período de tempo, esse TC seria abortado para continuar com a próxima.
Às vezes, porém, era necessária uma etapa para alterar a hora do sistema (para verificar o módulo do planejador do aplicativo em teste); portanto, após definir a hora do sistema em algumas horas no futuro, o tempo limite do TC expirou e o caso de teste foi abortado. Eu tive que mudar de
time.time()
paratime.clock()
lidar com isso corretamente.fonte
clock()
-> número de ponto flutuanteRetorne o tempo da CPU ou o tempo real desde o início do processo ou desde a primeira chamada para
clock()
. Isso tem tanta precisão quanto os registros do sistema.time()
-> número de ponto flutuanteRetorne o tempo atual em segundos desde a época. Frações de segundo podem estar presentes se o relógio do sistema as fornecer.
Geralmente
time()
é mais preciso, porque os sistemas operacionais não armazenam o tempo de execução do processo com a precisão que armazenam o tempo do sistema (ou seja, tempo real)fonte
Depende do que você gosta. Se você quer dizer WALL TIME (como em, a hora no relógio na parede), time.clock () NÃO fornece precisão, pois pode gerenciar o tempo da CPU.
fonte
time.clock()
em servidores Linux e os números que obtive definitivamente não foram segundostime()
tem melhor precisão do queclock()
no Linux.clock()
só tem precisão menor que 10 ms. Enquantotime()
dá precisão prefeito. Meu teste está no CentOS 6.4 , python 2.6using clock():
fonte
A diferença é muito específica da plataforma.
clock () é muito diferente no Windows e no Linux, por exemplo.
Para o tipo de exemplo que você descreve, você provavelmente deseja o módulo "timeit".
fonte
clock
é"very different"
?Como outros, conhecida
time.clock()
é depreciado em favor dotime.perf_counter()
outime.process_time()
, mas tempo de resolução Python 3.7 introduz nanossegundo comtime.perf_counter_ns()
,time.process_time_ns()
etime.time_ns()
, juntamente com 3 outras funções.Estas 6 novas funções de resolução em nansegundos estão detalhadas no PEP 564 :
Como outros também observaram, use o
timeit
módulo para cronometrar funções e pequenos trechos de código.fonte
No Unix, time.clock () mede a quantidade de tempo de CPU usada pelo processo atual, portanto, não é bom medir o tempo decorrido de algum ponto no passado. No Windows, ele medirá os segundos do relógio de parede decorridos desde a primeira chamada para a função. No sistema, time.time () retornará segundos passados desde a época.
Se você estiver escrevendo um código destinado apenas ao Windows, ambos funcionarão (embora você use os dois de maneira diferente - nenhuma subtração é necessária para time.clock ()). Se isso for executado em um sistema Unix ou você quiser um código que seja garantido como portátil, convém usar time.time ().
fonte
Resposta curta: use time.clock () para cronometrar em Python.
Nos sistemas * nix, clock () retorna o tempo do processador como um número de ponto flutuante, expresso em segundos. No Windows, ele retorna os segundos decorridos desde a primeira chamada para esta função, como um número de ponto flutuante.
time () retorna os segundos desde a época, em UTC, como um número de ponto flutuante. Não há garantia de que você obtenha uma precisão melhor que 1 segundo (embora time () retorne um número de ponto flutuante). Observe também que, se o relógio do sistema tiver sido atrasado entre duas chamadas para esta função, a segunda chamada de função retornará um valor mais baixo.
fonte
De acordo com o meu entendimento, time.clock () tem a precisão que seu sistema permitir.
fonte
Eu uso esse código para comparar 2 métodos. Meu sistema operacional é o Windows 8, processador Core i5, RAM 4GB
resultado:
time () = 0.0993799996376
clock () = 0.0993572257367
fonte
Resposta certa: ambos têm o mesmo comprimento de uma fração.
Mas qual mais rápido se
subject
étime
?Um pequeno caso de teste :
Eu não sou um laboratório suíço, mas eu testei ..
Com base nesta pergunta:
time.clock()
é melhor quetime.time()
Editar:
time.clock()
é contador interno, portanto não pode ser usado fora, possui limitaçõesmax 32BIT FLOAT
, não pode continuar contando se não for o primeiro / o último valor. Não é possível mesclar outro contador ...fonte
time.clock()
foi removido no Python 3.8 porque tinha um comportamento dependente da plataforma :No Windows , essa função retorna os segundos do relógio de parede decorridos desde a primeira chamada para essa função, como um número de ponto flutuante
Então, qual função escolher?
Tempo do processador : é quanto tempo esse processo específico passa sendo executado ativamente na CPU. Dormir, aguardar uma solicitação da Web ou o horário em que apenas outros processos são executados não contribuirá para isso.
time.process_time()
Hora do relógio de parede : refere-se a quanto tempo passou "em um relógio pendurado na parede", ou seja, fora do tempo real.
Usar
time.perf_counter()
time.time()
também mede o tempo do relógio de parede, mas pode ser redefinido, para que você possa voltar no tempotime.monotonic()
não pode ser redefinido (monotônico = avança apenas), mas tem menor precisão do quetime.perf_counter()
fonte
Comparando o resultado do teste entre o Ubuntu Linux e o Windows 7.
No Ubuntu
No Windows 7
fonte