I have essentially done the following:
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
So now i have the file named 'stats.dmp' stored offline.
How can i use pstats to analyze this file for human consumption?
Thanks in advance.
Python Profilers, like cProfile helps to find which part of the program or code takes more time to run. This article will walk you through the process of using cProfile module for extracting profiling data, using the pstats module to report it and snakeviz for visualization.
Here's what i found out and the Python program I generated. I tested this with a .dmp file made on linux & analyzed on windows xp. It worked FINE. The Python file is named, "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()
You can try snakeviz
https://jiffyclub.github.io/snakeviz
It is a browser based graphical viewer for the output of Python’s cProfile module and an alternative to using the standard library pstats module.
# 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
Here is a sample image for a visualized pstat file you can dump like above.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With