您好專家Pythonists,我開始使用cProfile,以便我的程序有一個更詳細的時間信息。但是,這對我來說是相當令人不安的,因爲這有很大的開銷。任何想法爲什麼cProfile報告7秒,而時間模塊僅在下面的代碼中報告2秒?在Python cProfile中有嚴重的開銷嗎?
# a simple function
def f(a, b):
c = a+b
# a simple loop
def loop():
for i in xrange(10000000):
f(1,2)
# timing using time module
# 2 seconds on my computer
from time import time
x = time()
loop()
y = time()
print 'Time taken %.3f s.' % (y-x)
# timing using cProfile
# 7 seconds on my computer
import cProfile
cProfile.runctx('loop()', globals(), locals())
此外,函數非常微不足道,因此分析器似乎佔用了大量相對於總運行時間條款。 – 2010-06-28 18:03:53
感謝您的回覆。 如果我將循環()中的迭代次數從10百萬增加到1億次,則時序線性變化!時間模塊花了20s,cProfile花了70s。如果cProfile花費更長的時間運行,我不會想,但是報告的時間(即在代碼中花費的實際時間)應該排除開銷。有沒有辦法校準cProfile(因爲我只對在代碼中花費的實際時間感興趣)? – user378289 2010-06-28 18:25:30
@xqx:不是我所知道的。分析可以讓您瞭解程序不同部分的相關性能,但不適用於生產性能報告。 – 2010-07-02 19:55:06