我基本上做了以下事情:
import cProfile, pstats, StringIO
pr = cProfile.Profile()
pr.enable()
# ... my code did something ...
pr.disable()
s = StringIO.StringIO()
sortby = 'cumulative'
ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
ps.dump_stats('stats.dmp') # dump the stats to a file named stats.dmp
Run Code Online (Sandbox Code Playgroud)
所以现在我将名为'stats.dmp'的文件存储在离线状态.
如何使用pstats分析此文件供人类使用?
提前致谢.
我正在尝试加载 cProfile 配置文件,进行一些排序和处理,然后将结果输出到文件中。根据文档,我认为我可以简单地传递一个文件对象,该print_stats函数将重定向到该流。
这是我尝试使用的代码:
import sys,pstats
s = open('output.txt', 'w')
p = pstats.Stats('profile.dat', s)
Run Code Online (Sandbox Code Playgroud)
这是由此产生的错误:
TypeError: Cannot create or construct a <class pstats.Stats at 0xbaa870> object from '<open file 'output.txt', mode 'w' at 0xb2ef60>''
Run Code Online (Sandbox Code Playgroud)
我还应该补充一点,当我没有将对象传递给流参数时,输出在终端中显示为正常。
我知道可以使用 获取特定模块的函数调用频率pstats.print_stats('python_script.py:'),但是我想打印一份不涉及一组函数的分析程序中所有调用函数的频率报告。
例如,假设我有function1、function2、function3和function4(假设这个列表要大得多),并且我想打印每个函数被调用的次数,只要它不是function3。是否可以创建要忽略的函数列表并将其传递给pstats模块以及我正在分析的文件?
特别是,我对不包括前面提到的集合的所有函数的调用数量感兴趣。我可能可以编写一个脚本来解析完整的函数列表并忽略该集,但我觉得 pstats 模块中可能有一种更简单的方法。