我想以便宜的方式测量函数的执行时间,如下所示:
def my_timeit(func, *args, **kwargs):
t0 = time.time()
result = func(*args, **kwargs)
delta = time.time() - t0
return delta, result
def foo():
time.sleep(1.23)
return 'potato'
delta, result = my_timeit(foo)
但是我想使用timeit
,profile
或其他内置来处理因平台差异而导致的常见陷阱,并且实际执行时间可能更好墙上的时间。
我尝试使用timeit.Timer(foo).timeit(number=1)
,但界面似乎模糊了返回值。
答案 0 :(得分:2)
这是我目前的尝试。但我会欢迎任何建议,因为这太过于苛刻,可能会有所改善。
import time
from timeit import Timer
def my_timeit(func, *args, **kwargs):
output_container = []
def wrapper():
output_container.append(func(*args, **kwargs))
timer = Timer(wrapper)
delta = timer.timeit(1)
return delta, output_container.pop()
def foo():
time.sleep(1.111)
return 'potato'
delta, result = my_timeit(foo)
编辑:适合在下面作为装饰者工作:
def timeit_decorator(the_func):
@functools.wraps(the_func)
def my_timeit(*args, **kwargs):
output_container = []
def wrapper():
output_container.append(the_func(*args, **kwargs))
timer = Timer(wrapper)
delta = timer.timeit(1)
my_timeit.last_execution_time = delta
return output_container.pop()
return my_timeit
答案 1 :(得分:0)
怎么样
>>time python yourprogram.py < input.txt
这是我运行的python脚本的输出
[20:13:29] praveen:jan$ time python mtrick.py < input_mtrick.txt
3 3 9
1 2 3 4
real 0m0.067s
user 0m0.016s
sys 0m0.012s