Objetivo
Medir o tempo de execução de um código em Python.
Código
O código abaixo utiliza o decorador @calculatempo para decorar a função get_api().
Isto indica o seguinte para a função getapi(): “quando você for chamada você será passada como referência para a função calcula_tempo, que por sua vez irá estender o comportamento do seu código adicionando o cálculo do tempo que você levou para executar.”
Então, as variáveis tempo_inicio e tempo_fim são usada para medir o tempo de cada execução da função get_api().
Para que não haja dúvidas sobre o tempo decorrido entre duas chamadas da função get_api(), seria ideal que tivéssemos como medir o tempo entre o término de uma execução e o início da próxima. A variável tempo_entre_chamadas foi utilizada justamente para esta finalidade. Com ela é possível verificar o tempo decorrido em milissegundos entre duas execuções sucessivas da função get_api().
import requests
import time
import gc
gc.disable() # Desabilita Garbage Collector
def calcula_tempo(func): # Decorator que mede tempo de execução.
def wrapper():
tempo_inicio = time.perf_counter_ns() // 1000000
func()
tempo_fim = time.perf_counter_ns() // 1000000
print("Duração da função {}: {} ms".format(func.__name__, tempo_fim - tempo_inicio))
return wrapper
@calcula_tempo
def get_api(): # Função que chama uma API qualquer ou faz uma determinada ação que se deseja monitorar o tempo.
# response = requests.get("http://api.open-notify.org/astros.json")
# print(response.json())
response = requests.get("http://google.com/search", params=b'q=use+python')
# print(response.headers)
# print(response.text)
tempo_depois_chamada = time.perf_counter_ns() // 1000000 # Variável utilizada para medir o tempo entre execuções.
for x in (range(2)):
print('Execução número: {}'.format(x))
tempo_antes_chamada = time.perf_counter_ns() // 1000000 # Variável utilizada para medir o tempo entre execuções.
tempo_entre_chamadas = tempo_antes_chamada - tempo_depois_chamada # Tempo decorrido desde a última chamada da função.
print("Tempo passado desde a última execução: {} ms".format(tempo_entre_chamadas))
get_api() # Execução da função que se quer ter o tempo medido.
tempo_depois_chamada = time.perf_counter_ns() // 1000000 # Variável utilizada para medir o tempo entre execuções.
print('------------')
gc.enable() # Habilita Garbage Collector
Execução número: 0
Tempo passado desde a última execução: 0 ms
Duração da função get_api: 724 ms
------------
Execução número: 1
Tempo passado desde a última execução: 0 ms
Duração da função get_api: 707 ms
------------
It’s done!