timeit吃回报值

时间:2014-01-07 14:26:51

标签: 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)

但是我想使用timeitprofile或其他内置来处理因平台差异而导致的常见陷阱,并且实际执行时间可能更好墙上的时间。

我尝试使用timeit.Timer(foo).timeit(number=1),但界面似乎模糊了返回值。

2 个答案:

答案 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