How to profile python code under Google App Engine runtime python27?
In runtime python it was done by this code - python runtime:
from google.appengine.ext import webapp
class PageHandler(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, WebApp World!')
def real_main():
application = webapp.WSGIApplication([('/', PageHandler)], debug=True)
run_wsgi_app(application)
def profile_main():
# This is the main function for profiling
# We've renamed our original main() above to real_main()
import cProfile, pstats, StringIO
prof = cProfile.Profile()
prof = prof.runctx('real_main()', globals(), locals())
stream = StringIO.StringIO()
stats = pstats.Stats(prof, stream=stream)
stats.sort_stats('cumulative')
logging.info("Profile data:\n%s", stream.getvalue())
if __name__ == "__main__":
profile_main()
In runtime python27 is has to be done differently since there is no main calls - how to do the same thing - I want to switch to python27 but not without profiling. How to attach profiler in python27 - python27 runtime?
import webapp2
class PageHandler(webapp2.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, WebApp World!')
app = webapp2.WSGIApplication([('/', PageHandler)])
You can profile a WSGI app using WSGI middleware by inserting in your appengine_config.py:
import cProfile
import cStringIO
import logging
import pstats
def webapp_add_wsgi_middleware(app):
def profiling_wrapper(environ, start_response):
profile = cProfile.Profile()
response = profile.runcall(app, environ, start_response)
stream = cStringIO.StringIO()
stats = pstats.Stats(profile, stream=stream)
stats.sort_stats('cumulative').print_stats()
logging.info('Profile data:\n%s', stream.getvalue())
return response
return profiling_wrapper
You can also just drop in App Engine Mini Profiler, which takes care of this incantation for you and presents the results nicely on each page being profiled.
It provides both API call perf information (via Appstats) and standard profiling data for all function calls (via cProfiler)
https://github.com/kamens/gae_mini_profiler
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With