使用TimeIt管理安装程序代码

时间:2010-01-01 07:39:09

标签: performance python timeit

作为我的宠物项目的一部分,我需要在Python中测试我的代码的各种不同实现的性能。我预计这将是我做的很多事情,我想尝试使我编写的代码尽可能易于更新和修改。

目前它还处于起步阶段,但我已经开始使用字符串来管理常见的设置或测试代码,例如:

naiveSetup = 'from PerformanceTests.Vectors import NaiveVector\n' \
+ 'left = NaiveVector([1,0,0])\n' \
+ 'right = NaiveVector([0,1,0])'

这使我只能编写一次代码,但代价是更难以阅读和笨拙地更新。

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

使用三重引号“”“

setup_code = """
  from PerformanceTests.Vectors import NaiveVector
  left = NaiveVector([1,0,0])
  right = NaiveVector([0,1,0])
"""

timeit的文档中提供了另一种有趣的方法:

def test():
    "Stupid test function"
    L = []
    for i in range(100):
        L.append(i)

if __name__=='__main__':
    from timeit import Timer
    t = Timer("test()", "from __main__ import test")
    print t.timeit()

虽然这不适合所有需要。

答案 1 :(得分:0)

时间码很好,但它仍会让你猜测发生了什么。

要了解实际发生的情况,请在调试器中手动暂停几次,然后检查调用堆栈。

例如,在一个实现中比另一个实现慢30倍的代码中,堆栈的每个样本在其花费的额外时间内有96.7%的可能性下降,因此您可以看到原因。

无需猜测。