Python评测runsnakerun输出中有哪些列?

2024-09-29 06:22:56 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能非常明显,但只是想确保我理解runsnakerun中的列。在

名称,调用,RCalls,Local,/Call,Cum,/Call,文件,行,目录

这里有一些我想我能理解的

Name—被调用函数的名称

  1. 通话次数?在
  2. File—存储函数的文件
  3. Line—文件中定义函数的行
  4. Directory—具有函数定义的文件的目录

我觉得不敢大胆猜测的是其余的:

  1. RCalls公司
  2. 本地
  3. /呼叫
  4. 累计
  5. /呼叫

谢谢


Tags: 文件函数name目录名称定义localcall
2条回答

最好的方法是用一个示例来说明,假设您有以下程序(存储在简介.py,但为了清晰起见,将其分成几部分):

def topfunction():
    tinyfunction()
    for i in range(100000):
        manytinyfunction()

调用很简单这个函数被直接调用了多少次。当然,当您选择左侧的项时,这些数字将发生变化,反映所选函数调用函数的次数。manytinyfunction将被调用100000次,因此调用次数为100000次。tinyfunction将被调用一次,因此它的调用将为1。在

^{pr2}$

r调用类似,但也包括执行调用时发生的调用。请注意,recursive调用的值仅为10,但rcalls为1010(定义如下,但如果参数为n,则调用自身n次)

    alllocal()
    allcumulative()

类似地,local包括在函数本身上花费的所有时间,不包括对其他函数的调用。这里alllocal在这里有一个很大的值,但是{}在这里没有任何值,因为它把它的工作放在subfunction上。在

def tinyfunction():
    pass

def manytinyfunction():
    pass

local旁边的/调用只会在每次调用中分解上面的本地值,因此manytinyfunction总体上有一点时间,但是local/Call中的一个非常小的数字,因为每个调用都非常便宜。在

def alllocal():
    for i in range(1000):
        for j in range(1000):
            for k in range(1000):
                pass

对于alllocal,无论是本地调用还是累积调用,都将是巨大的,因为这个函数非常昂贵,而且所有的开销都是本地的。在

def allcumulative():
    for i in range(1000):
        subfunction()

def subfunction():
    for j in range(1000):
        for k in range(1000):
            pass

cumulative旁边的/调用与local的/Call相同,只是与cumulative本身一样,它包含从函数本身发出的所有调用的全部开销。因此,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对于局部和累积都有很大的值,其中asallcumulative是截然不同的。请注意,recursive在这两列中是相同的,对您自己的调用都是计数的。在

底部的调用者按钮可让您了解所选函数正在调用的其他函数,而调用者可让您确定谁在调用所选函数。在

我的理解是:

  • RCalls递归调用数
  • Local本地执行所花费的总时间(不调用其他方法)
  • /Call每次呼叫的本地时间
  • Cum总累积时间
  • /Call每次呼叫的累计时间

相关问题 更多 >