Como Medir o Tempo de Execução de Código em Python (time e timeit)
Como Medir o Tempo de Execução de um Trecho de Código em Python
Medir a performance e o tempo de resposta de funções é fundamental para identificar gargalos, otimizar algoritmos e garantir a eficiência de aplicações. Este script demonstra como utilizar o módulo nativo
time para medições simples de scripts no dia a dia, e o módulo timeit para medições de alta precisão em microbenchmarks. A solução permite avaliar o desempenho do código sem depender de bibliotecas externas.Python
import time
import timeit
# --- Abordagem 1: Usando time.perf_counter() (Ideal para blocos e rotinas simples) ---
def exemplo_tempo_execucao():
inicio = time.perf_counter()
# Bloco de código a ser medido (Ex: simulação de processamento)
soma = sum(i ** 2 for i in range(1_000_000))
fim = time.perf_counter()
tempo_total = fim - inicio
print(f"[time] Tempo de execução: {tempo_total:.6f} segundos")
# --- Abordagem 2: Usando timeit (Ideal para microbenchmarks e testes precisos) ---
# O timeit executa o código múltiplas vezes para isolar oscilações do sistema operacional
codigo_teste = """
soma = sum(i ** 2 for i in range(100_000))
"""
tempo_timeit = timeit.timeit(stmt=codigo_teste, number=100)
tempo_medio = tempo_timeit / 100
print(f"[timeit] Tempo médio por execução (100 repetições): {tempo_medio:.6f} segundos")
# --- Exemplo de uso prático ---
if __name__ == "__main__":
exemplo_tempo_execucao()
Pontos-chave
time.perf_counter()vstime.time(): Sempre prefiratime.perf_counter()para medir performance. Otime.time()utiliza o relógio do sistema (que pode ser ajustado manualmente ou por servidores NTP), enquanto operf_counter()utiliza o relógio monotônico de alta resolução do processador.- Microbenchmarks com
timeit: O módulotimeitdesabilita temporariamente a coleta de lixo (garbage collection) durante a medição para evitar distorções no tempo final do benchmark. - Parâmetro
numbernotimeit: Define a quantidade de vezes que a instrução será repetida para calcular o tempo total. Dividir o resultado pelo número de repetições fornece a média precisa de uma única execução. - Oscilações de Hardware: Para cenários de produção ou profiling detalhado de funções grandes, considere utilizar profiling dedicado com
cProfileou decoradores customizados comperf_counter.

Comentários
Postar um comentário