-
-
Save vincentwyshan/62421a2ad7a16be07373f77dffdd982f to your computer and use it in GitHub Desktop.
Python profiling decorator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| """ | |
| Python decorator for profiling a function using cProfile. Stats are output to wherever print statements would | |
| normally go to, e.g. stdout or a log file. Can be used with Django view functions. | |
| pstats' sort and print arguments can be supplied to the decorator. The default is to sort cumulatively and | |
| list to first 10 lines. | |
| See http://docs.python.org/library/profile.html#instant-user-s-manual for details on pstats sort and print arguments. | |
| cProfile is a standard module in most python distributions. pstats is also in many but not all. If pstats doesn't | |
| import then install the module via the python-profiler package. E.g. on apt-based systems: | |
| sudo apt-get install python-profiler | |
| """ | |
| from cProfile import Profile | |
| import pstats | |
| def profile(sort_args=['cumulative'], print_args=[10]): | |
| profiler = Profile() | |
| def decorator(fn): | |
| def inner(*args, **kwargs): | |
| result = None | |
| try: | |
| result = profiler.runcall(fn, *args, **kwargs) | |
| finally: | |
| stats = pstats.Stats(profiler) | |
| # stats.strip_dirs().sort_stats(*sort_args).print_stats(*print_args) | |
| stats.sort_stats(*sort_args).print_stats(*print_args) | |
| return result | |
| return inner | |
| return decorator | |
| # Example without profiling arguments: | |
| @profile(): | |
| def my_function(my_args): | |
| pass | |
| # Example with profiling arguments: | |
| @profile(sort_args=['cumulative', 'name'], print_args=[.5, 'init']): | |
| def my_function(my_args): | |
| pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment