Python 返回值的时间
我想廉价地测量函数的执行时间,比如:Python 返回值的时间,python,profile,timeit,cprofile,Python,Profile,Timeit,Cprofile,我想廉价地测量函数的执行时间,比如: 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
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)
,但界面似乎掩盖了返回值 怎么样
>>time python yourprogram.py < input.txt
>time python yourprogram.py
这是我运行的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
praveen:jan$time python mtrick.py这是我当前的尝试。但我欢迎任何建议,因为这感觉太粗糙,可能需要改进
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
你的问题是什么?为什么你只想运行一次计时器?这将消除
timeit
模块的一个优点;反复运行代码以消除随机操作系统和硬件事件的影响。因此“便宜”。这只是为了测量我的项目euler实现的执行时间,我的目标是将它们保持在10秒左右。我不想等待它运行不止一次。@wim天真的问题:使用number=1
的timeit
不会有这个技巧吗?timeit.Timer用于运行代码无数次,以精确测量小时间。在这种情况下,您并不真正关心返回值。Intead您想要的是@timeit decorno,我想在python内部完成这项工作。你能不能再举一个叫你的装饰师的例子?@Joel只是像普通的装饰师一样使用它。每次调用后,将在函数对象上设置last\u execution\u time
属性。