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
-~----------~----~----~----~------~----~------~--~---

Reply via email to