这可能非常明显,但只是想确保我理解runsnakerun中的列是什么.
名称,呼叫,RCalls,本地,/呼叫,暨,/呼叫,文件,线路,目录
以下是我认为我理解的一些内容
名称 - 被调用函数的名称
剩下的就是那些我不觉得冒险的人:
谢谢
这是我的理解:
RCalls 递归调用的数量Local 在本地执行上花费的总时间(不调用另一种方法)/Call 每次通话的当地时间Cum 总累计时间/Call 每次通话的累计时间最好的说明方式是一个例子 - 假设您有以下程序(存储在profileme.py中,但为了清楚起见分成几部分):
def topfunction():
tinyfunction()
for i in range(100000):
manytinyfunction()
Run Code Online (Sandbox Code Playgroud)
调用很简单 - 直接调用此函数的次数.当然,当您选择左侧的项目时,这些数字将会改变,反映所选功能调用该功能的次数. manytinyfunction将被召唤100,000次,因此呼叫将是100,000. tinyfunction将被调用一次,因此其调用将为1.
for i in range(10):
recursive(100)
Run Code Online (Sandbox Code Playgroud)
rcalls类似,但它还包括在执行调用时发生的调用.请注意recursive,调用只有10,但rcalls是1010(定义如下,但如果参数为n,则调用自身n次.
alllocal()
allcumulative()
Run Code Online (Sandbox Code Playgroud)
类似地,local包括在函数本身中花费的所有时间,而不包括对其他函数的调用.这里alllocal有一个很大的价值,但这里allcumulative没什么,因为它把它的工作放在了subfunction.
def tinyfunction():
pass
def manytinyfunction():
pass
Run Code Online (Sandbox Code Playgroud)
该/呼叫旁边的地方仅解除上述局部值每次通话了,所以manytinyfunction有一点时间的整体,但在本地/调用一个非常非常小的数目,因为每个呼叫真的很便宜.
def alllocal():
for i in range(1000):
for j in range(1000):
for k in range(1000):
pass
Run Code Online (Sandbox Code Playgroud)
对于alllocal本地和累积,/ call将是巨大的,因为这个功能是如此昂贵,并且所有费用都是本地的.
def allcumulative():
for i in range(1000):
subfunction()
def subfunction():
for j in range(1000):
for k in range(1000):
pass
Run Code Online (Sandbox Code Playgroud)
累计旁边的/ Call与本地的/ call相同,除了像累积本身一样,它包含从函数本身包含的所有调用的全部成本.所以本地/电话号码很小allcumulative,但很大alllocal.累积/调用不是这样,在两种情况下都是相同的.
def recursive(n):
if n > 0:
return recursive(n-1)
else:
return 0
Run Code Online (Sandbox Code Playgroud)
提供的定义recursive是为了完整性
if __name__=="__main__":
topfunction()
Run Code Online (Sandbox Code Playgroud)
在分析它并运行runsnake之后:
python -m cProfile -o profileme.out profileme.py
runsnake profileme.out
Run Code Online (Sandbox Code Playgroud)
所以,请注意,alllocal本地和累积的价值都很大,而且allcumulative差别很大.请注意,recursive两列中都是相同的 - 对自己的调用会被计算在内.
底部的"Callees"按钮可让您确定所选功能正在调用的其他功能,而" 呼叫者"可让您确定谁在调用所选功能.
| 归档时间: |
|
| 查看次数: |
1082 次 |
| 最近记录: |