very useful. Any thoughts on how this compares to the start-up of
regular GAE (0.96)?

On Mar 23, 9:27 pm, cz <[email protected]> wrote:
> I added some timing code to see how expensive a cold app startup is.
> This is a Django1.x app so YMMV.
>
> The typical numbers are:
>
> Zipimport of Django: 180ms
> Appengine-django-helper monkeypatching: 430ms
> Misc imports, app-specific patching, etc: 20ms
> ------------------------------------------------------------------------
> Total app startup: 630ms
>
> This is for startup only, not the time it takes to then process the
> request, so this is a fixed expense. Also, this is real time not cpu
> quota time which is much higher.
>
> The biggest hog is the django-helper monkeypatcher. I'm eventually
> going to try appengine-patch with the hope that it will be faster.
>
> Additionally, on a cold startup my app processes a request in about
> 500ms, but on a warm app it only takes 10ms due to some aggressive
> caching. I think that when all your app instances expire so does all
> it's memcached data.
>
> If anybody has done something similar and found different numbers
> please post the results and let me know what I did wrong.
>
> Here's the main.py I'm using in case you'd like to point out any
> errors in my methodology:
> ----------------------------------------
>
> from time import clock
> t_main_start = clock()
>
> # Standard Python imports.
> import os
> import sys
> import logging
> import settings
>
> logging.getLogger().setLevel(settings.LOGGING_LEVEL)
>
> # Fix (hack) for missing unlink
> if os.name == 'nt':
>     os.unlink = lambda: None
>
> # TODO (after gathering stats): remove this since appengine_django
> does it for us
> # Import Django 1.x from a zipfile and get rid of v.96.
> t_zip_start = clock()
> django_zip_path = os.path.abspath('django.zip')
> if django_zip_path not in sys.path:
>     sys.path.insert(0, django_zip_path)
>     for k in [k for k in sys.modules if k.startswith('django')]:
>         del sys.modules[k]
> # TODO (after gathering stats): remove this line
> from django import template # provoke django zipimport
> t_zip = (clock() - t_zip_start) * 1000
>
> # Install appengine_django. Patches Django 1.x for use with GAE
> t_patch_start = clock()
> from appengine_django import InstallAppengineHelperForDjango
> InstallAppengineHelperForDjango()
> t_patch = (clock() - t_patch_start) * 1000
>
> # Patch the appengine_django patch to fix User object creation
> # Remove this when switching to appengine-patch
> from monkeypatch import patch
> patch()
>
> # Google App Engine imports.
> from google.appengine.ext.webapp import util
>
> # Import the part of Django that we use here.
> import django.core.handlers.wsgi
>
> t_main = (clock() - t_main_start) * 1000
> logging.info('[TIME] main.py startup: %.1fms (zipimport: %.1fms,
> appengine-django: %.1fms)' % (t_main,t_zip,t_patch))
>
> def real_main():
>     t_request_start = clock()
>     # Create a Django application for WSGI.
>     application = django.core.handlers.wsgi.WSGIHandler()
>
>     # Run the WSGI CGI handler with that application.
>     util.run_wsgi_app(application)
>     t_request = (clock() - t_request_start) * 1000
>     logging.info('[TIME] request: %.1fms' % t_request)
>
> def profile_main():
>     # Rename this to main() for profiling
>     import cProfile, pstats
>     prof = cProfile.Profile()
>     prof = prof.runctx("real_main()", globals(), locals())
>     print "<pre>"
>     stats = pstats.Stats(prof)
>     stats.sort_stats("time")  # Or cumulative
>     stats.print_stats(80)  # 80 = how many to print
>     # The rest is optional.
>     #stats.print_callees()
>     #stats.print_callers()
>     print "</pre>"
>
> main = real_main
>
> if __name__ == '__main__':
>   main()
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to