Sumário
O módulo time
do Python fornece várias funções para medir o tempo decorrido, cada uma com suas próprias vantagens e desvantagens. A escolha ideal depende do aplicativo específico e do nível de precisão necessário. Este artigo esclarece as distinções entre quatro funções de temporizador principais: time.time()
, time.process_time()
, time.perf_counter()
e time.monotonic()
.
Usando time.time()
time.time()
retorna o tempo do sistema atual como um número de ponto flutuante representando segundos desde a época (geralmente 1º de janeiro de 1970, 00:00:00 UTC). Este é um tempo de “relógio de parede”, suscetível a alterações de ajustes do relógio do sistema (por exemplo, sincronização NTP). Consequentemente, não é adequado para medições de tempo precisas.
import time
start_time = time.time()
# ... algum código para ser cronometrado ...
end_time = time.time()
elapsed_time = end_time - start_time
print(f"Tempo decorrido: {elapsed_time:.4f} segundos")
Use time.time()
para aplicativos que exigem apenas uma estimativa aproximada do tempo decorrido, como registrar os horários de início e fim de um processo.
Usando time.process_time()
time.process_time()
mede a soma do tempo de CPU do sistema e do usuário do processo atual, excluindo o tempo gasto dormindo ou esperando por E/S. É ideal para benchmarking de operações limitadas pela CPU, fornecendo uma medida confiável do tempo de CPU consumido. Não é afetado por alterações no relógio do sistema e não representa o tempo do relógio de parede.
import time
start_time = time.process_time()
# ... algum código limitado pela CPU ...
end_time = time.process_time()
elapsed_time = end_time - start_time
print(f"Tempo de processo decorrido: {elapsed_time:.4f} segundos")
Esta função é mais adequada para avaliar o esforço computacional de um programa, independentemente de fatores externos.
Usando time.perf_counter()
time.perf_counter()
fornece um valor de contador de desempenho de alta resolução com a maior precisão disponível. É perfeito para benchmarking de código onde a precisão é primordial. Como time.process_time()
, não é afetado por ajustes do relógio do sistema, mas, ao contrário de time.process_time()
, inclui o tempo gasto dormindo ou esperando.
import time
start_time = time.perf_counter()
# ... algum código para ser cronometrado com precisão ...
end_time = time.perf_counter()
elapsed_time = end_time - start_time
print(f"Tempo do contador de desempenho decorrido: {elapsed_time:.6f} segundos")
Use time.perf_counter()
para micro-benchmarking e aplicativos que exigem medições de tempo extremamente precisas, independentemente de alterações no relógio do sistema.
Usando time.monotonic()
time.monotonic()
retorna um valor de contador monotonicamente crescente. O valor sempre aumenta e nunca diminui, mesmo com ajustes no relógio do sistema. É essencial para medir o tempo decorrido quando garantir um valor de tempo sempre crescente é crucial, independentemente de influências externas. Não está diretamente relacionado ao tempo do relógio de parede ou ao tempo da CPU.
import time
start_time = time.monotonic()
# ... algum código ...
end_time = time.monotonic()
elapsed_time = end_time - start_time
print(f"Tempo monotônico decorrido: {elapsed_time:.4f} segundos")
Esta função é vital em cenários em que ajustes de relógio podem levar a medições de tempo imprecisas, como loops de jogos ou barras de progresso.
Em conclusão, a seleção da função de temporizador apropriada depende inteiramente das necessidades do aplicativo específico. Para temporização geral, time.time()
pode ser suficiente. Para tarefas limitadas pela CPU, time.process_time()
é recomendado. Para medições de alta precisão, time.perf_counter()
é ideal. Finalmente, time.monotonic()
garante valores de tempo monotonicamente crescentes, crucial quando ajustes de relógio são uma preocupação.