Based very heavily on the middleware in this snippet. As with that one, append '?prof' to the URL to see profiling output instead of page output. The big change is that you can also pass an argument to control sorting.
For example, you can append '?prof=cumulative' to sort the results by the cumulative time consumed. See the documentation on the Stats class for all the options.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | import cProfile
import os
import pstats
import tempfile
from cStringIO import StringIO
from django.conf import settings
class ProfilerMiddleware(object):
def process_view(self, request, callback, callback_args, callback_kwargs):
if settings.DEBUG and 'prof' in request.GET:
self.profiler = cProfile.Profile()
args = (request,) + callback_args
return self.profiler.runcall(callback, *args, **callback_kwargs)
def process_response(self, request, response):
if settings.DEBUG and 'prof' in request.GET:
(fd, self.profiler_file) = tempfile.mkstemp()
self.profiler.dump_stats(self.profiler_file)
out = StringIO()
stats = pstats.Stats(self.profiler_file, stream=out)
stats.strip_dirs() # Must happen prior to sort_stats
if request.GET['prof']:
stats.sort_stats(request.GET['prof'])
stats.print_stats()
os.unlink(self.profiler_file)
response.content = '<pre>%s</pre>' % out.getvalue()
return response
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 11 months, 3 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 4 weeks ago
- Serializer factory with Django Rest Framework by julio 1 year, 6 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 7 months ago
- Help text hyperlinks by sa2812 1 year, 8 months ago
Comments
Please login first before commenting.