Módulo timeit em Python
O módulo timeit é utilizado para medir o tempo de execução de trechos de código. Sua função principal é timeit.timeit(), que calcula o tempo necessário para executar uma determinada operação ou função:
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)Essa função aceita os seguintes parâmetros:
stmt: código cuja execução será medida. O valor padrão épass.setup: código executado antes destmt. O valor padrão também épass. Normalmente, é usado para importar módulos necessários para a execução do código a ser medido.timer: temporizador utilizado, representado por um objetotimeit.Timer. Em geral, o valor padrão já é adequado para a plataforma.number: número de vezes questmtserá executado. O valor padrão é1000000.globals: define o espaço de nomes onde o código será executado.
A função retorna o tempo de execução em segundos.
O exemplo a seguir mede o tempo necessário para executar uma função que calcula a soma dos números de 1 a 10000:
import timeit
def sum():
result = 0
for i in range(10000):
result += i
return result
execution_time = timeit.timeit(lambda: sum(), number=100)
print("Tempo de execução da função sum:", execution_time)Aqui, a função sum é chamada dentro de uma expressão lambda para ser executada pelo timeit.timeit(). O parâmetro number foi definido como 100, o que significa que a função será executada 100 vezes para a medição.
A saída será algo como:
Tempo de execução da função sum: 0.01668926700222073
Definição do Código a Ser Medido
No exemplo anterior, a execução foi medida chamando uma função definida no código. No entanto, também é possível especificar o código diretamente como uma string:
import timeit
action = "10+12"
print(timeit.timeit(action))Aqui, o tempo de execução da expressão 10+12 será medido. Como o parâmetro number não foi definido, a execução ocorrerá 1 milhão de vezes por padrão.
Se o código contiver várias instruções, elas podem ser separadas por ponto e vírgula:
import timeit
action = "a=10; b=12; a+b"
print(timeit.timeit(action))Quando o código a ser medido for mais extenso, incluindo estruturas condicionais ou laços, pode ser útil defini-lo dentro de uma string com aspas triplas:
import timeit
action = '''
def sum():
result = 0
for n in range(100):
result += n
return result
'''
print(timeit.timeit(action))Esse método permite medir a execução de funções completas. Como alternativa, é possível definir a função separadamente e chamá-la dentro do timeit.timeit(), como feito no primeiro exemplo.
Importação de Funções Externas
Se a função que será medida estiver em outro módulo, ela precisa ser importada. O parâmetro setup pode ser utilizado para isso. Suponha que a função sum_test() esteja no módulo test. O código para medi-la ficaria assim:
import timeit
my_action = "sum_test()"
my_setup = "from test import sum_test"
print(timeit.timeit(my_action, setup=my_setup))Uso de Temporizadores
A função timeit.timeit() usa um temporizador interno, representado por um objeto da classe timeit.Timer:
class timeit.Timer(stmt='pass', setup='pass', timer=<default timer>, number=1000000, globals=None)O construtor dessa classe aceita os mesmos parâmetros da função timeit.timeit(). Além disso, timeit fornece a função timeit.default_timer(), que retorna o temporizador padrão da plataforma. Esse temporizador pode ser usado para medições manuais:
import timeit
def sum():
result = 0
for n in range(100):
result += n
return result
start = timeit.default_timer()
print("Start time:", start)
sum()
print("Execution time:", timeit.default_timer() - start)Aqui, timeit.default_timer() é chamado antes e depois da execução da função sum(), permitindo calcular seu tempo de execução manualmente.
Documentação: