Como registrar o início e o término bem-sucedidos da execução de uma função?

Eugene W.

Estou depurando um código. Eu tenho um código com muitas linhas em python 2. E algumas funções são executadas por muito tempo. Para verificar uma função concluída com êxito, estou fazendo o seguinte:

print("creating an object... "), # a comma here to print a subsequent print in one line 
obj = TimeDemandingFunction()
print("end")

Existe um melhor método para registrar?

PS, a função TimeDemandingFunction()é de uma biblioteca externa .

Eugene W.

A resposta de Baduker me levou a dar uma versão modificada de sua resposta. Vou resumir e dar vários exemplos. A construção de um decorador é semelhante ao Baduker, mas com várias modificações: (1) há uma notificação de que uma função foi iniciada com a informação de onde foi chamada (número de linha e quais teclas são usadas), (2) ele escreve informações sobre o tempo apenas no final. Abaixo, dou exemplos de como usá-lo para funções externas:

import functools
import timeit
import sys

def my_custom_timer(func):
@functools.wraps(func)
def wrapper_timer(*args, **kwargs):
    start_time = timeit.default_timer()
    s = ''
    for arg_name in kwargs:
            s += arg_name + '; line=' + str(sys._getframe().f_back.f_lineno)
    print("Started {!r}({!r}) ".format(func.__name__, s)),
    value = func(*args, **kwargs)
    end_time = timeit.default_timer()
    run_time = end_time - start_time
    print("Finished in {:.4f} seconds.".format(run_time))
    return value
return wrapper_timer

Então vai uma parte interessante. Primeiro, você precisa descobrir todo o caminho para a função. Use a ideia aqui . Resumidamente, as funções têm um atributo de módulo :

>>> from math import sqrt
>>> sqrt.__module__
'math'

Primeiro, vamos redefinir a sqrtfunção de algum módulo:

import math
@my_custom_timer
def sqrt(*args, **kwargs):
    return math.sqrt(*args, **kwargs)

E se uma função de um módulo embutido ?! Sem problemas. A resposta é __builtin__módulo:

>>> print(divmod.__module__)
'__builtin__'

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

C ++ Exibindo a hora de início e de término da execução de um programa

Como alterar o intervalo de datas da string para as datas de início e término?

Como contar o tempo total da data de início e término no mangusto?

MDX - Como agregar por data considerando as datas de início e término em uma dimensão

No Azure Devops, como faço para criar uma consulta que mostra a data de início e a data de término da iteração?

Obtenha a data de início e de término de uma semana. Mês, número da semana e ano são dados como entrada do usuário

Como verificar se as datas de início e término não interferem nas outras datas de início e término

Quero imprimir a hora de início, a hora de término e a execução total em R e anexar uma etiqueta a ela

Como obter o número de meses entre uma data de início e uma data de término

Como calcular a data de início a partir da data de término e o número de dias

Como obter o período de data de início e término de uma sequência de dados em python?

Como obter a data de início e a data de término selecionando o número da semana no SQL Server

Como obtenho uma matriz de horários com hora de início, hora de término e duração?

Como usar o Microsoft Graph C # SDK para ver calendarView entre uma data de término e de início

python - soma GroupBy como uma proporção sobre os intervalos de datas de início e término

Como criar o maior intervalo não sobreposto contendo as datas de início e término?

Retorna o valor de uma função após o término da função aasy

Data de início e término do SAS de execução consecutiva

Como posso registrar o SQL gerado pelo SQLAlchemy e os tempos de execução da consulta?

Verifique a hora de início e término da sobreposição por grupo em R

Como verificar se uma "hora de início" não é posterior a "hora de término" em PHP

como comparar e dividir o tempo de início e término usando loop ou linq?

Declaração If para determinar as datas de início e término

Por que um objeto criado e retornado por uma função continua a existir após o término da execução da função?

Crie uma lista com datas que estão entre as datas de início e término

Converter uma série temporal em datas de início e término usando o Pandas

Meça a diferença de tempo / tempo de execução entre o início e o término no Power BI

Como obter o Running Total com base na data de início e de término no MYSQL

Como calculo o total de minutos entre os horários de início e término?

TOP lista

quentelabel

Arquivo