RunSnakeRun is a small GUI utility that allows
you to view (Python) cProfile or Profile profiler dumps in a sortable
GUI view. It allows you to explore the profiler information using
a "square map" visualization or sortable tables of data. It also (experimentally)
allows you to view the output of the Meliae "memory analysis" tool
using the same basic visualisations.
RunSnakeRun is a simple program, it doesn't provide all the bells-and-whistles of a program like KCacheGrind, it's intended to allow for profiling your Python programs, and just your Python programs. What it does provide, for profile viewing:
If you are new to profiling you may wish to check out the author's presentation at PyCon 2009 which tries to explain the use of profiling as a tool.
For meliae memory-dump viewing, it provides:
You will need to have all of wxPython, SquareMap and RunSnakeRun installed to use RunSnakeRun. You may also need the "python-profile" package for your platform, which provides the pstats view.
You will likely want to use your platform wxPython package. If you already have Python setuptools installed (a.k.a. easy_install), you should be able to install the Python packages with:
easy_install RunSnakeRun
You will require a modern wxPython and Python installation. The setup will create a script named "runsnake" on Linux machines which launches the profile viewer.
To use cProfile to capture your application's profile data:
import cProfile
command = """reactor.run()"""
cProfile.runctx( command, globals(), locals(), filename="OpenGLContext.profile" )
To view the results of your run:
python runsnake.py OpenGLContext.profile
There will be a brief delay as the application is created and begins the loading process, then you should see something like this:
Click on any column title to sort by that property within that list. Select a record in the left-most list view to see a breakdown of that record in the right-side list views. Choose the appropriate view on the right via the tabs. You can resize the borders between the lists and square-map views. You can select a package/module/function hierarchic view via the menus. You can also toggle use of percentage displays there.
Note: this feature is considered
experimental, the memory consumed loading even a tiny meliae dump is
enormous, so real-world programs will generally make RunSnakeRun
unreasonably slow or exhaust all RAM on your computer.
Meliae will need to be installed (and compiled):
easy_install meliae
Now instrument your application to be able to trigger a memory dump at the moment you would like to capture, like so:
from meliae import scanner
scanner.dump_all_objects( filename ) # you can pass a file-handle if you prefer
The memory dump will generally be quite large (e.g. 2MB to describe an application with 200KB of user-controllable memory usage (i.e. not the interpreter itself)) and for any real application will take an extremely long time to load.
RunSnakeRun is reasonably stable. I don't tend to do much work on it, as it tends to just work. My (personal) current wish list for the project follows:
If you have an idea, feel free to check out the code and implement the new feature. I'm certainly willing to entertain new features or bug-fix requests as well. The code is available in bzr here:
bzr branch lp:~mcfletch/squaremap/trunk squaremap
cd squaremap
python setup.py develop
bzr branch lp:~mcfletch/runsnakerun/trunk runsnakerun
cd runsnakerun
python setup.py develop
You can contact me directly if you'd like to contribute. Or you can just set up a bzr branch on LaunchPad and request a merge.
This is just a listing of things that either I or others have requested as features:
RunSnakeRun is by no means a comprehensive tool-set for profiling, you may want to have any or all of these other tools available for your profiling needs: