|Version 8 (modified by 7 years ago) (diff),|
django-command-extensions provides a
runprofileserver command for running the development server with hotshot/profiling tools enabled. It has the ability to export KCacheGrind compatible profile files.
Profiling Middleware and Extended Profiling Middleware print profile results for method, additionally groups results by files and by modules. Add the "&prof=" query parameter and you'll see the profiling results in your browser.
django-profiling seems to be another variant of the profiling middleware.
django.core.handlers.profiler-hotshot provides profiling support for Django when using mod_python. Hotshot generates logs that can be also used by aplication like kcachegrind. Read Django profiling with hotshot and kcachegrind for more details.
Here's a similar solution for the internal development webserver. Apply the included patch to
django/core/management.py and start Django with
manage.py runserver. Each request will create a
.prof file in your
/tmp directory. You can then open a Python shell and print the statistics:
>>> import hotshot.stats >>> stats = hotshot.stats.load("stones.prof") >>> stats.strip_dirs() >>> stats.sort_stats('time', 'calls') >>> stats.print_stats(20)
You can also use gather_profile_stats.py in the Django distribution to aggregate the generated profilings and open them with pstats.Stats
Using WSGI to profile
An alternative approach is to run django from a boring WSGI server and profile that. For example using wsgiref you can create a really simple WSGI server for running django:
from wsgiref.simple_server import make_server from django.core.handlers.wsgi import WSGIHandler httpd = make_server('', 8000, WSGIHandler()) httpd.serve_forever()
Run this using:
$ DJANGO_SETTINGS_MODULE=mysite.settings python myserver.py
To profile this run using cProfile (or profile):
$ DJANGO_SETTINGS_MODULE=mysite.settings python -m cProfile myserver.py
The default invocation will print the profile stats when you kill the server, it's probably more useful to write to a file and use pstats to read it:
$ DJANGO_SETTINGS_MODULE=mysite.settings python -m cProfile -o mysite.profile myserver.py ... lots of requests ... $ python >>> import pstats >>> s = pstats.Stats("mysite.profile") >>> s.sort_stats("time").print_stats(20)
runserver-profiler.diff (1.3 KB) - added by 11 years ago.
patch for management.py enables profiling for runserver
runserver-profiler2.diff (1.2 KB) - added by 10 years ago.
updated the patch against the latest revision
runserver-profiler2.2.diff (1.2 KB) - added by 10 years ago.
updated the patch against the latest revision and made the path configurable
profiler-cprofile.py (547 bytes) - added by 9 years ago.
Adapted profile handler to use cProfile module. Place in django/core/handlers and set PythonHandler in apache conf
runserver-profiler3.diff (2.3 KB) - added by 9 years ago.
New patch against r7569. Extend runserver command with '--profile' argument. Will run djangos development server with profiling output into systems temporary directory.
Download all attachments as: .zip