我想以便宜的价格测量函数的执行时间,如下所示:
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)
但界面似乎模糊了返回值。
这是我
目前的尝试。 但我欢迎任何建议,因为这感觉太笨拙了,可能会有所改进。
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
怎么样
>>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