[英]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.