cProfile 没有方法 runcall

Posted

技术标签:

【中文标题】cProfile 没有方法 runcall【英文标题】:cProfile has no method runcall 【发布时间】:2018-02-07 17:51:21 【问题描述】:

我正在尝试使用 cProfile 来分析一些 python 代码。我相信我需要使用cProfile.runcall(),而不是cProfile.run(),因为我要运行的方法是self.funct() 的形式,而不是简单的funct()

当我尝试使用cProfile.runcall,详细here时,我收到以下错误:

AttributeError: 'module' object has no attribute 'runcall'

是否已从 cProfile 中删除了 runcall 方法?如果是这样,是否有使用cProfile.runcall(self.funct,*args) 形式的替代方法?

最小(非)工作示例:

import cProfile

def funct(a):
    print a

cProfile.runcall(funct,"Hello")

【问题讨论】:

我最近(艰难地)发现cProfile 模块不能与profile 模块互换。换句话说,Python 2,7 documentation 中的第一条语句,即“profilecProfile 模块都提供以下功能:...”,显然是错误的 - 并且差异不是描述在任何地方(我可以找到)。 @martineau 我也想知道这个,但我发现它也不适用于profile PProteus:哦,在这种情况下是你的错误。请参阅我刚刚发布的answer。 【参考方案1】:

在这种情况下,问题在于 runcall()Profile class 实例的方法,而不是模块级函数(这是您的代码尝试使用它的方式) .你需要先构造一个实例,如documentation中的代码sn-p所示。

这似乎可行(在 Python 2.7.14 中):

import cProfile

def funct(a):
    print a

pr = cProfile.Profile()
pr.enable()
pr.runcall(funct, "Hello")

【讨论】:

以上是关于cProfile 没有方法 runcall的主要内容,如果未能解决你的问题,请参考以下文章

在python中将函数传递给cProfile的正确方法是啥?

将 cProfile 与 asyncio 代码一起使用的正确方法是啥?

cProfile 没有属性 runctx

使用 cProfile 在 Python 中分析类的方法?

使用 cProfile 分析 numpy 没有给出有用的结果

Python cProfile 结果似乎没有加起来