From: Tracy S. R. <tr...@re...> - 2003-08-05 16:43:23
|
I'm not sure exactly why, but to fix it, you should cache the Template *classes* instead of the instances, and then instantiate the template with the appropriate search list in your 'renderView' method. You probably don't even need the cache if you switch to instantiating it within the renderView method. It could be something like this: def renderView(self, viewName=None, viewData=None): if not viewName: viewName = self.getDefaultViewName() # --// <templates> would be the folder/package where your templates are stored viewKlassName = 'templates.%s' % viewName import templates klassModule = __import__(viewKlassName, globals(), locals(), viewKlassName) klass = getattr(klassModule, viewKlassName) searchList = self.constructTemplateNamespaces(viewName, viewData) t = klass(searchList=searchList) self.write(str(t)) --T On Tuesday, August 5, 2003, at 11:24 AM, Max Ischenko wrote: > Hello. > > I'm using WebKit along with Cheetah template engine and got very > annoying problem which I failed to solve. It seems to be related to > the multithreading issues though. > > When two different clients access the same page one sometimes get data > for the other client. Each client's data is stored in self.session() > variable so I can't understand how this could be. Page is dynamically > generated with the help of Cheetah API. > The problem may be caused by page generated with wrong data but I guard > the generation routine with threading.Lock. > > > Here is relevant code excerpt: > > def renderView(self, viewName=None, viewData=None): > "called by Page.writeHTML" > if not viewName: > viewName = self.getDefaultViewName() > filename = self.getViewFileName(viewName) > try: > self.lock.acquire() > try: > searchList = self.constructTemplateNamespaces(viewName, > viewData) > t = templatesCache.get(filename) > self.augmentSearchList(t, searchList) > response = str(t) > self.write(response) > finally: > self.lock.release() > > templates are cached in the global templatesCache var.: > class CheetahTemplateFileCache: > """ > Caches Cheetah's template files. > """ > def __init__(self): > self.cache = {} > def get(self, fileName): > "Returns a Cheetah's Template for given file name." > t = None > if not self.cache.has_key(fileName): > mtime = time.time() > t = Template(file=fileName) > self.cache[fileName] = (t, mtime) > else: > t, mtime = self.cache[fileName] > if os.path.getmtime(fileName) > mtime: > mtime = time.time() > t = Template(file=fileName) > self.cache[fileName] = (t, mtime) > return t > > templatesCache = CheetahTemplateFileCache() > > > Any ideas? > More information could be supplied if needed. > > -- > Regards, max. > > > ------------------------------------------------------- > This SF.Net email sponsored by: Free pre-built ASP.NET sites including > Data Reports, E-commerce, Portals, and Forums are available now. > Download today and enter to win an XBOX or Visual Studio .NET. > http://aspnet.click-url.com/go/psa00100003ave/ > direct;at.aspnet_072303_01/01 > _______________________________________________ > Webware-discuss mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webware-discuss > > - - - - - - - - Tracy S. Ruggles Chief Technology Officer, Axiomfire tr...@ax... :: 512/461.6199 - - - - - - - - |