Plop is a stack-sampling profiler for Python. Profile collection can be turned on and off in a live process with minimal performance impact.
Plop is currently a work in progress and pretty rough around the edges, so be prepared to run into bugs and extremely unrefined interfaces (which are likely to change in backwards-incompatible ways in future releases).
pip install plop
The plop.collector
module runs on Python 2.5, 2.6, and 2.7 on Unixy
platforms including Linux, BSD and Mac OS X (must support the setitimer
system call). The plop.viewer
module requires Python 2.7 and Tornado
2.x. The viewer can be (and usually is) run separately from the collector.
In the application to be profiled, create a plop.collector.Collector
,
call start()
, wait, then stop()
. Dump collector.stack_counts
to a file. See ProfileHandler
in demo/busy_server.py
for an example
of how to trigger profiling via an HTTP interface.
Or you can add a @plop()
decorator to the functions that you wish to
profile. To import this decorator do from plop.decorator import plop
. The
decorator will default to writing log data to the folder /tmp/plop
.
To use the viewer, run:
python -m plop.viewer --datadir=demo/profiles
and go to http://localhost:8888
An end-to-end demo is available in the demo
directory.
create_profile.sh
will run a server (which talks to itself to
generate load), generate a profile, and shut it down. view_profile.sh
will run the viewer app.
The source code is hosted at https://github.com/bdarnell/plop