如何分析用pstats.dump_stats(filename)离线创建的文件?

Lov*_*ell 14 python profiling analysis pstats

我基本上做了以下事情:

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分析此文件供人类使用?

提前致谢.

Lov*_*ell 18

这是我发现的和我生成的Python程序.我使用在linux上制作的.dmp文件测试了这个并在windows xp上进行了分析.它工作很精细.Python文件名为"analyze_dmp.py".

#!/usr/local/bin/python2.7
# -*- coding: UTF-8 -*-
"""analyze_dmp.py takes the file INFILEPATH [a pstats dump file] Producing OUTFILEPATH [a human readable python profile]
Usage:   analyze_dmp.py INFILEPATH  OUTFILEPATH
Example: analyze_dmp.py stats.dmp   stats.log
"""
# --------------------------------------------------------------------------
# Copyright (c) 2019 Joe Dorocak  (joeCodeswell at gmail dot com)
# Distributed under the MIT/X11 software license, see the accompanying
# file license.txt or http://www.opensource.org/licenses/mit-license.php.
# --------------------------------------------------------------------------
# I added the above License by request here are my research links
#    https://meta.stackexchange.com/q/18883/311363
#    https://meta.stackexchange.com/q/128840/311363
#    https://codereview.stackexchange.com/q/10746

import sys, os
import cProfile, pstats, StringIO

def analyze_dmp(myinfilepath='stats.dmp', myoutfilepath='stats.log'):
    out_stream = open(myoutfilepath, 'w')
    ps = pstats.Stats(myinfilepath, stream=out_stream)
    sortby = 'cumulative'

    ps.strip_dirs().sort_stats(sortby).print_stats(.3)  # plink around with this to get the results you need

NUM_ARGS = 2
def main():
    args = sys.argv[1:]
    if len(args) != NUM_ARGS or "-h" in args or "--help" in args:
        print __doc__
        s = raw_input('hit return to quit')
        sys.exit(2)
    analyze_dmp(myinfilepath=args[0], myoutfilepath=args[1])

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

  • 以下更改使代码可以在 Python 3 中运行:(1) 第一行:python2.7 => python3,(2) 删除导入:不导入 StringIO,(3) 添加连线:print(__doc__),(4)重命名函数:将 raw_input(...) 更改为 input(...) (3认同)

nyb*_*bon 15

你可以试试snakeviz https://jiffyclub.github.io/snakeviz

它是一个基于浏览器的图形查看器,用于 Python 的 cProfile 模块的输出,也是使用标准库 pstats 模块的替代方案。

# to install it with pip
pip install snakeviz

# once installed, you can use snakeviz to view the file
snakeviz /path/to/your/dump/pstat/file
Run Code Online (Sandbox Code Playgroud)

这是您可以像上面一样转储的可视化 pstat 文件的示例图像。

在此处输入图片说明