profilehooks
.. image:: https://github.com/mgedmin/profilehooks/workflows/build/badge.svg?branch=master
:target: https://github.com/mgedmin/profilehooks/actions
.. image:: https://ci.appveyor.com/api/projects/status/github/mgedmin/profilehooks?branch=master&svg=true
:target: https://ci.appveyor.com/project/mgedmin/profilehooks
.. image:: https://coveralls.io/repos/mgedmin/profilehooks/badge.svg?branch=master
:target: https://coveralls.io/r/mgedmin/profilehooks
It's a collection of decorators for profiling functions. E.g. to profile a
single function::
from profilehooks import profile
@profile
def my_function(args, etc):
pass
The results will be printed when the program exits (or you can use
@profile(immediate=True)
).
If you're interested in coarse timings and don't want to pay for the overhead
of profiling, use ::
from profilehooks import timecall
@timecall # or @timecall(immediate=True)
def my_function(args, etc):
pass
Finally, you may be interested in seeing line coverage for a single function ::
from profilehooks import coverage
@coverage
def my_function(args, etc):
pass
Also functions can be available in Python console or module if run it with -m arg ::
$ python -m profilehooks
>>> profile
<function profile at 0x1005c6488>
$ python -m profilehooks yourmodule
Full documentation is available through pydoc profilehooks
after
installation.
The home page for this module is https://mg.pov.lt/profilehooks. It has
screensho, uh, that is, more examples.
Changelog
1.13.0 (2024-10-09)
-
Add support for Python 3.9, 3.10, 3.11, 3.12, and 3.13.
-
Drop support for Python 2.7, 3.5 and 3.6.
-
Drop support for hotshot
(which was only available for Python 2.7).
1.12.0 (2020-08-20)
1.11.2 (2020-03-03)
1.11.1 (2020-01-30)
1.11.0 (2019-04-23)
1.10.0 (2017-12-09)
1.9.0 (2017-01-02)
-
Drop claim of Python 3.2 compatibility. Everything still works, except I'm
no longer running automated tests on 3.2, so things might regress.
-
Drop Python 2.6 compatibility.
-
Add Python 3.6 compatibility.
1.8.1 (2015-11-21)
1.8.0 (2015-03-25)
- New option:
@profile(stdout=False)
to suppress output to sys.stdout.
1.7.1 (2014-12-02)
-
Make @profile(profiler='hotshot')
work again. This was probably broken
in 1.0 or 1.1, but nobody complained.
-
Fix missing space in the output of @profile(skip=N)
.
-
Make @coverage_with_hotshot
output match @coverage
output precisely.
-
100% test coverage.
-
Claim Python 3.4 and PyPy compatibility.
1.7 (2013-10-16)
1.6 (2012-06-05)
1.5 (2010-08-13)
1.4 (2009-03-31)
- Added support for cProfile, make it the default profiler when available.
Previously profilehooks supported profile and hotshot only.
1.3 (2008-06-10)
- Store profile results (when you pass filename to @profile) in pstats format
instead of pickles. Contributed by Florian Schulze.
1.2 (2008-03-07)
1.1 (2007-11-07)
-
First release to PyPI, with a setup.py and everything.
-
New arguments to @profile: dirs, sort, entries. Contributed by Hanno
Schlichting.
-
Preserve function attributes such as doc and module when decorating
them.
-
Pydoc-friendly docstring wrapping and other docstring improvements.
1.0 (2006-12-06)
-
Changed licence from GPL to MIT.
-
New decorator: @timecall
-
New arguments to @profile: skip, filename, immediate.
-
Added support for profile, after becoming convinced hotshot was unreliable.
Made it the default profiler.
0.1 (2004-12-30)
-
First public release (it didn't actually have a version number), announced on
my blog: https://mg.pov.lt/blog/profiling.html
-
@profile and @coverage decorators that didn't accept any arguments.
-
hotshot was the only profiler supported for @profile, while @coverage used
trace.py