我是一个刚刚开始描述我的代码的初学者,并且很困惑为什么cProfile给出的经过的时间与使用time.time()给出的时间差不多。
# Python 2.7.2
import cProfile
def f(n):
G = (i for i in xrange(n))
sum = 0
for i in G:
sum += i
num = 10**6
cProfile.run('f(num)')
这给了 在2.648秒内进行1000004次函数调用
然而有了time.time(),我得到0.218000173569秒
import time
x = time.time()
f(num)
print time.time() - x
据我所读,我想这可能是因为cProfile的开销。有关cProfile时序可能非常关闭的常规提示,还是获得更准确计时的方法?
答案 0 :(得分:3)
分析的目的是找出你的程序的哪些部分花费最多的时间,因此需要最多的关注。如果一个功能正在使用90%的时间,那么您应该在那里查看如何使该功能更有效。整个运行是否需要10秒或1000次并不重要。
也许分析器给你的最重要的信息是调用一些东西。为什么这是有用的是它可以帮助您找到不必要地经常调用事物的地方,特别是如果您有嵌套循环,或许多调用其他函数的函数。分析器可以帮助您跟踪这些内容。
分析开销是不可避免的,而且很大。但让分析器完成它所做的事情要比在整个地方插入你自己的时间和打印语句容易得多。
答案 1 :(得分:1)