时序代码块 - Python

时间:2016-10-12 22:39:46

标签: python timing benchmarking

我试图测量在Python中运行一系列指令所需的时间,但我不想写下这样的内容:

start = time.clock()
...
<lines of code>
...
time_elapsed = time.clock() - start

相反,我想知道是否有一种方法可以将指令块作为参数发送给返回已用时间的函数,例如

time_elapsed = time_it_takes(<lines of code>)

此方法的实现可能类似于

def time_it_takes(<lines of code>):
  start = time.clock()
  result = <lines of code>
  return (result, time.clock() - start)

有人知道我是否有办法做到这一点?提前谢谢。

4 个答案:

答案 0 :(得分:5)

这可以很好地利用装饰器。你可以编写一个像这样做的装饰器

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        func(*args, **kwargs)

        print('The function ran for', time.time() - start)
    return wrapper


@timer
def just_sleep():
    time.sleep(5)

just_sleep()

输出

The function ran for 5.0050904750823975

然后你可以使用@timer装饰你想要计时的任何函数,你也可以在装饰器中做一些其他奇特的事情。就像这个函数运行超过15秒做某事......别做另外的事情

注意:这不是在python中测量函数执行时间的最准确方法

答案 1 :(得分:2)

您可以构建自己的上下文管理器来计算相对较长的代码。

None * 2

但要小心你测量的是什么。在Windows上import time class MyTimer(object): def __enter__(self): self.start = time.clock() return self def __exit__(self, typ, value, traceback): self.duration = time.clock() - self.start with MyTimer() as timer: time.sleep(3) print(timer.duration) 是一个高分辨率的挂钟时间,但在Linux上它的CPU运行时间。

答案 2 :(得分:0)

使用python -m cProfile myscript.py它提供了关于方法的时间消耗的完整日志。

答案 3 :(得分:0)

如果您使用IPython,这是一件好事,您可以将代码构造为单行,即函数调用:

%timeit your-code

这对我来说很方便。希望它有所帮助。