我正在尝试按照此处的说明进行操作: 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/