- Author:
- petrilli
- Posted:
- June 19, 2009
- Language:
- Python
- Version:
- 1.0
- Tags:
- middleware performance profiler
- Score:
- 2 (after 2 ratings)
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
- "Magic Link" Management Command by webology 3 weeks ago
- Closest ORM models to a latitude/longitude point by simonw 3 weeks ago
- Log the time taken to execute each DB query by kennyx46 3 weeks, 1 day ago
- django database snippet by ItsRLuo 3 weeks, 6 days ago
- Serialize a model instance by chriswedgwood 1 month, 3 weeks ago
Comments
Please login first before commenting.