在python中获取执行时间函数

时间:2011-12-08 20:27:48

标签: python function time measure

我创建了这个工作函数来获取另一个函数的时间:

def get_execution_time(function, args, numberOfExecTime=1):
    """Return the execution time of a function in seconds.

    """

    return round(Timer(partial(function, args)).timeit(numberOfExecTime), 5)

顺便提一下我有一个问题:我不能给要定时的函数多个输入(args)。 我怎样才能做到这一点?部分是正确的工具吗?

我尝试过装饰,但我无法存储我做统计数据所需的时间。

4 个答案:

答案 0 :(得分:4)

如果你可以牺牲numberOfExecTime参数的默认值,你就可以这样做:

from timeit import Timer
from functools import partial

def get_execution_time(function, numberOfExecTime, *args, **kwargs):
    """Return the execution time of a function in seconds."""
    return round(Timer(partial(function, *args, **kwargs))
                 .timeit(numberOfExecTime), 5)

def foo(a, b, c = 12):
    print a, b, c

get_execution_time(foo, 1, 3, 4, c = 14)

或者您可以这样做并且仍然具有numberOfExecTime的默认值:

from timeit import Timer
from functools import partial

def get_execution_time(function, *args, **kwargs):
    """Return the execution time of a function in seconds."""
    numberOfExecTime = kwargs.pop('numberOfExecTime', 1)
    return round(Timer(partial(function, *args, **kwargs))
                 .timeit(numberOfExecTime), 5)

def foo(a, b, c = 1):
    print a, b, c

get_execution_time(foo, 1, 2, c = 2)
# => 1 2 2

get_execution_time(foo, 4, 5, c = 3, numberOfExecTime = 2)
# => 4 5 3
# => 4 5 3

答案 1 :(得分:3)

你可以传递多个参数:args应该是一个包含要传递的参数的元组。

现在,您可以传递*args而不是args

(如果您还需要将kwargs传递给您的方法,那么请在get_execution_time另一个参数kwargs并将**kwargs传递给您的function

def get_execution_time(function, args=(), kwargs ={}, numberOfExecTime=1):
    return round(Timer(partial(function, *args, **kwargs)).timeit(numberOfExecTime), 5)

答案 2 :(得分:2)

我会使用时间装饰器。

import time

def timeit(f):

    def timed(*args, **kw):

        ts = time.time()
        result = f(*args, **kw)
        te = time.time()

        print 'func:%r args:[%r, %r] took: %2.4f sec' % \
          (f.__name__, args, kw, te-ts)
        return result

    return timed

使用装饰器很容易使用注释。

@timeit
def compute_magic(n):
     #function definition
     #....

或者重新设置您想要的时间功能。

compute_magic = timeit(compute_magic)

我的博文在这里有更多信息。 http://blog.mattalcock.com/2013/2/24/timing-python-code/

答案 3 :(得分:0)

如果argslist个参数,您可以使用*args展开它:

return round(Timer(partial(function, args)).timeit(numberOfExecTime), 5)