Login

Profiling Middleware w/sorting

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

  1. Profiling middleware using cProfile by sgb 7 years, 3 months ago
  2. Profiling Middlware by udfalkso 8 years, 3 months ago
  3. Extended Profiling Middleware by hauser 7 years, 5 months ago
  4. pycallgraph by roppert 6 years, 5 months ago
  5. Interactive Profiling Middleware by sfllaw 5 years ago

Comments

Please login first before commenting.