Python – Tempo de execução

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!

Bruno Veiga

Bruno Veiga

Arquiteto Cloud e Arquiteto de Soluções. Me dedicando em compartilhar conhecimento e ajudar empresas a encontrar as melhores soluções tecnológicas para os problemas do negócio com agilidade, segurança, equipes alinhadas e dentro do orçamento.