繁体   English   中英

Python - 使用装饰器测量 function 执行时间

[英]Python - measure function execution time with decorator

我有下一个问题:例如,我有一个名为 my_pow 的 function(这只是一个简单的示例),它需要两个 arguments 并返回 a^b,它看起来像这样:

def my_pow(a, b):
    res = a ** b
    return res
    # or just return a ** b, it doesn't really matter

我有一个装饰器,它应该测量装饰后的 function 运行了多长时间。

def decorator_timer(some_function):
    from time import time

    def wrapper(*args, **kwargs):
        t1 = time()
        result = some_function(*args, **kwargs)
        return result, time()-t1
    return wrapper

问题是,我无法真正测量 function 计算例如 99999 ** 99999 所需的时间。我可以计算它并打印 res,这样我会得到正确的执行时间,但是my_pow() function 不会返回任何内容,或者我可以返回 res,但运行时间将是 0.0001,尽管明显装饰 function 运行时间要长得多,实际上大约 3 秒。 有没有办法测量运行 function 需要多长时间,同时从 function 返回一个 res 值?

您的 function 运行时间0.0001 秒。 但由于数量如此之大,打印它几乎需要 3 秒。 所以你的代码正在运行,I/O(print) 很慢。 如果您只打印花费的时间,您可以自己查看。

为了进一步证明这一点并添加 emil 的评论

def decorator_timer(some_function):
    from time import time

    def wrapper(*args, **kwargs):
        t1 = time()
        result = some_function(*args, **kwargs)
        end = time()-t1
        return result, end
    return wrapper


@decorator_timer
def my_pow(a, b):
    res = a ** b
    return res
    # or just return a ** b, it doesn't really matter

result, exec_time = my_pow(99999 , 99999)
print(exec_time) # prints after 0.07347989082336426 seconds
print(result) # takes ~3 seconds

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM