def cprofile_wsgi_middleware(app): """ Call this middleware hook to enable cProfile on each request. Statistics are dumped to the log at the end of the request. :param app: WSGI app object :return: WSGI middleware wrapper """ def _cprofile_wsgi_wrapper(environ, start_response): import cProfile, cStringIO, pstats profile = cProfile.Profile() try: return profile.runcall(app, environ, start_response) finally: stream = cStringIO.StringIO() stats = pstats.Stats(profile, stream=stream) stats.strip_dirs().sort_stats('cumulative', 'time', 'calls').print_stats(25) logging.info('cProfile data:\n%s', stream.getvalue()) return _cprofile_wsgi_wrapper def webapp_add_wsgi_middleware(app): return cprofile_wsgi_middleware(app)
Wednesday, January 30, 2013
Enable cProfile in Google App Engine
If it's not readily apparent to you how to enable CPU profiling on Google App Engine (it certainly wasn't to me, aside from a few hand waves at cProfile), this code snippet should get you up and running so you can focus on finding the data you need rather than the implied interfaces you have to mimic. It uses the standard WSGI middleware hook to wrap an incoming request in a cProfile call, formatting and dumping the resulting stats to the log when the request returns:
Subscribe to:
Posts (Atom)