2

我想以便宜的方式测量函数的执行时间,如下所示:

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),但界面似乎掩盖了返回值。

4

2 回答 2

3

这是我目前的尝试。但我欢迎任何建议,因为这感觉太老套了,可能需要改进。

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
于 2014-01-07T15:43:09.573 回答
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
于 2014-01-07T14:46:18.367 回答