python - 如何让 Python 分析器工作?

标签 python profiler

我正在尝试按照此处的说明进行操作: http://docs.python.org/2/library/profile.html#module-cProfile

具体来说,这部分:

import cProfile, pstats, io
pr = cProfile.Profile()
pr.enable()
... do something ...
pr.disable()
s = io.StringIO()
ps = pstats.Stats(pr, stream=s)
ps.print_results()

我已经确定 print_results 不是 Stats 类的真正方法,它似乎也不存在于任何地方。这是我当前的代码:

import cProfile, pstats, io
def foo(request):
    pr = cProfile.Profile()
    pr.enable()
    pass
    pr.disable()
    s = io.StringIO()
    ps = pstats.Stats(pr, stream = s)
    f = open('/profstats', 'a')
    ps.print_stats()
    f.write(s.getvalue())
    s.close()
    f.close()

当前结果是: /inspection-summary/处的类型错误 应为 unicode 参数,得到 'str'

(输出看起来像这样,因为我正在使用 Django 调用有问题的代码)。

那么有谁知道我怎样才能让探查器真正、好地工作?我只是希望它像预期的那样进行分析,然后将结果打印到一个文件中,以便我可以在执行后稍后查看结果。我可以让 dump_stats 工作,但它生成的文件是垃圾。

最佳答案

的确,profile/pstats 模块的 API 看起来很特别。我认为 ps.print_results() 行应该是通用的,即它应该写成 ps.call_some_methods_to_print_the_result(),但这确实不清楚。至于 dump_stats() 它实际上保存了一个二进制文件,以后可以重新加载。

这是一个对我有用的例子:

import cProfile, pstats
pr = cProfile.Profile()
pr.enable()
...
pr.disable()

f = open('x.prof', 'a')
sortby = 'cumulative'
pstats.Stats(pr, stream=f).strip_dirs().sort_stats(sortby).print_stats()
f.close()

sortby 的有效值为:calls、cumulative、file、line、module、name、nfl(用于名称/文件/行)、pcalls、stdname、time。

关于python - 如何让 Python 分析器工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074376/

相关文章:

python - 无法让 virtualenvwrapper 工作

python - 使用 Yappi 进行分析

java - 谁能推荐一个可编写脚本的 Java 分析器?

python - 如何在 Python 中的 scipy.optimize.curve_fit 中设置变量参数?

python - 无法在 Web 浏览器中从 python 打开 html 文件 - 改为用记事本打开

python - 我可以在数字中插入逗号吗?数字是字符串的一部分

python - 我在游戏中创建了一个敌人,它会在 y 轴上上下移动。然而他并没有出现

java - 在 macOS 上使用 DTrace 分析 Java 应用程序

java - JvisualVM 中的采样器和探查器有什么区别?

windows - XPerf中如何定位空闲时间(以及网络IO时间等)?