this is what i use: =================== from jinja2 import Environment, FunctionLoader , TemplateNotFound from google.appengine.api import memcache import os,logging VERSION = os.environ['CURRENT_VERSION_ID']
logging.warn ("COLD START") def jinja2_template_loader(templatename): templatepath = os.path.abspath(os.curdir+'/ template/'+templatename) template = memcache.get(templatepath+VERSION) logging.debug( "......INSIDE JINJA....") if template is None: try: logging.debug( "......READ....") template = file(templatepath).read() memcache.set(templatepath+VERSION,template,time=500) except: template = None return template SERVER = os.environ.get('SERVER_SOFTWARE','').lower() if SERVER.startswith('devel'): logging.debug("...DEVEL JINJA....") load_this = Environment(cache_size=0,loader = FunctionLoader (jinja2_template_loader)) else: load_this = Environment(loader= FunctionLoader (jinja2_template_loader)) def render(template_name,context): template = load_this.get_template(template_name) content = template.render(context) return content ========================= if your app handlers are cached (ie via "if __name__ == '__main__':main ()") this should be imported only once per server instance. It also caches templates both in memcache (for 8 minutes) and in instance memory (in case of local testing, templates are not cached in memory, so you can make changes and see the changes immediately) HTH Peter On Mar 13, 7:34 am, Jarek Zgoda <jarek.zg...@gmail.com> wrote: > If you move Environment creation routine to another module it will be > cached by Google, but only for few seconds (2-3?), so if your > application does not get enough traffic you'd gain nothing from this. > > In my attempts to speedup things I discovered that only loader can be > cached, but it has to be invalidated upon each new deployment so its > key has to have application version added (this is how I did key > versioning in my caching tools). Unfortunately, the gain from this > caching approaches 0. > > And the last thing: Armin Ronacher, the guy behind Jinja, is aware of > the problem and has some ideas on how to improve things on GAE, > hopefully including template bytecode caching (this would be really > super-nice!). > > On 13 Mar, 00:38, pedepy <paul.ro...@gmail.com> wrote: > > > hey so i use jinja2 templates because they are better [no citation > > needed], but from what i understand, loading the jinja2 environment > > can be quite an expensive task. Through logging, I have found out that > > each request to / loads the environment over and over.. I have those > > routines in a seperate python script (not the one that app.yaml > > fowards requests to for /). > > > anything im missing here ? I think this could be adding also an extra > > 1000 cpu ms on every requests ... > > > (by the way, i have tried the cookbook's memcache technique and it > > only works locally, it fails on the google servers..) --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine" group. To post to this group, send email to google-appengine@googlegroups.com To unsubscribe from this group, send email to google-appengine+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine?hl=en -~----------~----~----~----~------~----~------~--~---