Yet Another Python Profiler, but this time support Multithread/CPU time profiling.
CPython standard distribution comes with three profilers.
cProfile is implemented as a C module based on
Profile is in pure Python and
hotshot can be seen as a small subset of a cProfile.
The major issue is that all of these profilers lack support for multi-threaded programs and CPU time.
If you want to profile a multi-threaded application, you must give an entry point to these profilers and then maybe merge the outputs. None of these profilers are designed to work on long-running multi-threaded application.It is impossible to profile an application retrieve the statistics then stop and then start later on the fly (without affecting the profiled application).
- Profiler can be started/stopped at any time from any thread in the application.
- Profile statistics can be obtained from any thread at any time.
- Profile statistics can show actual CPU Time used instead of Wall time.
- "Profiler pollution" (effect on the application run-time) is very minimal.
Can be installed via PyPI
$ pip install yappi
OR from the source directly.
$ pip install git+https://github.com/sumerc/yappi#egg=yappi
- Profiler results can be saved in callgrind or pstat formats. (new in 0.82)
- Profiler results can be merged from different sessions on-the-fly. (new in 0.82)
- Profiler results can be easily converted to pstats. (new in 0.82)
- Profiling of multithreaded Python applications transparently.
- Supports profiling per-thread CPU time (new in 0.62)
- Profiler can be started from any thread at any time.
- Ability to get statistics at any time without even stopping the profiler.
- Various flags to arrange/sort profiler results.
- Supports Python >= 2.7.x
- Threads must be derived from "threading" module's Thread object.
Yappi is the default profiler in
PyCharm. If you have Yappi installed,
PyCharm will use it. See the official documentation for more details.