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() vs time.time(): Sempre prefira time.perf_counter() para medir performance. O time.time() utiliza o relógio do sistema (que pode ser ajustado manualmente ou por servidores NTP), enquanto o perf_counter() utiliza o relógio monotônico de alta resolução do processador.

  • Microbenchmarks com timeit: O módulo timeit desabilita temporariamente a coleta de lixo (garbage collection) durante a medição para evitar distorções no tempo final do benchmark.

  • Parâmetro number no timeit: 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 cProfile ou decoradores customizados com perf_counter.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server