pyramid_cubicweb/profile.py
author Christophe de Vienne <christophe@unlish.com>
Sat, 03 Jan 2015 16:51:32 +0100
changeset 11535 dd875009cc47
child 11537 caf268942436
permissions -rw-r--r--
[profile] Add a profiling tool

import cProfile
import itertools
from pyramid.view import view_config


@view_config(route_name='profile_ping')
def ping(request):
    request.response.text = u'pong'
    return request.response


@view_config(route_name='profile_cnx')
def cnx(request):
    request.cw_cnx
    request.response.text = u'pong'
    return request.response


def wsgi_profile(app, filename='program.prof', dump_every=50):
    profile = cProfile.Profile()

    counter = itertools.count(1)

    def application(environ, start_response):
        profile.enable()
        try:
            return app(environ, start_response)
        finally:
            profile.disable()
            if not counter.next() % dump_every:
                print "Dump profile stats to %s" % filename
                profile.create_stats()
                profile.dump_stats(filename)

    return application