如何使Python分析器正常工作?
问题内容:
我正在尝试按照此处的说明进行操作: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参数处的TypeError,得到了’str’
(输出看起来像这样,因为我正在使用Django来调用有问题的代码)。
那么,有谁知道我怎样才能使探查器真正正常工作?我只希望它像预期的那样进行概要分析,然后将结果打印到文件中,以便稍后在执行后查看结果。我可以使dump_stats正常工作,但是它产生的文件是垃圾。
问题答案:
实际上,配置文件/
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
包括:调用,累计,文件,行,模块,名称,nfl(用于名称/文件/行),调用,标准名称,时间。