这可能非常明显,但只是想确保我理解runsnakerun中的列是什么。
姓名,电话,RCalls,本地电话,/电话,暨电话,/电话,档案,线路,目录
以下是我认为理解的一些
名称 - 被调用函数的名称
我觉得不舒服的是其他人:
由于
答案 0 :(得分:7)
以下是我的理解:
RCalls
递归电话数Local
本地执行所花费的总时间(不调用其他方法)/Call
每次通话的当地时间Cum
总累计时间/Call
每次通话累计时间答案 1 :(得分:6)
说明的最佳方式是举例 - 假设您有以下程序(存储在profileme.py中,但为了清晰起见分成几部分):
def topfunction():
tinyfunction()
for i in range(100000):
manytinyfunction()
调用很简单 - 直接调用此函数的次数。当然,当您选择左侧的项目时,这些数字将会改变,反映所选功能调用该功能的次数。 manytinyfunction
将被调用100,000次,因此呼叫将为100,000次。 tinyfunction
将被调用一次,因此其调用将为1。
for i in range(10):
recursive(100)
rcalls 类似,但它还包括在执行调用时发生的调用。请注意recursive
调用只有10,但rcalls是1010(定义如下,但如果参数为n,则调用自身n次。
alllocal()
allcumulative()
同样,本地包括在函数本身中花费的所有时间,而不包括对其他函数的调用。此处alllocal
的值很大,但allcumulative
此处没有任何内容,因为它将其工作转移到subfunction
上。
def tinyfunction():
pass
def manytinyfunction():
pass
本地旁边的 /呼叫只会打破每次呼叫上方的本地值,因此manytinyfunction
总体上有一点时间,但本地/呼叫中的数字非常小,因为每次通话都很便宜。
def alllocal():
for i in range(1000):
for j in range(1000):
for k in range(1000):
pass
对于alllocal
,/ call对于本地和累积都是巨大的,因为这个功能非常昂贵,并且所有费用都是本地的。
def allcumulative():
for i in range(1000):
subfunction()
def subfunction():
for j in range(1000):
for k in range(1000):
pass
/累计旁边的呼叫与本地的/呼叫相同,不同之处在于,与累积本身一样,它具有从包含的功能本身发出的所有呼叫的全部费用。因此allcumulative
的本地/电话号码很小,但alllocal
的号码很大。累积/调用不是这样,在两种情况下都是相同的。
def recursive(n):
if n > 0:
return recursive(n-1)
else:
return 0
recursive
的定义是为了完整性而提供的
if __name__=="__main__":
topfunction()
对其进行分析并运行runsnake:
python -m cProfile -o profileme.out profileme.py
runsnake profileme.out
因此,请注意alllocal
对于本地和累积都有较大的值,而allcumulative
则明显不同。请注意,recursive
在两列中都相同 - 对自己的调用都会计算在内。
底部的被忽略按钮可让您找出所选功能正在呼叫的其他功能,而来电者可让您找出所选择的人员是谁功能