Changeset 4:ceb8920831a4 in livinglogic.python.nightshade

Show
Ignore:
Timestamp:
05/08/06 11:48:36 (13 years ago)
Author:
Walter Doerwald <walter@…>
Branch:
default
Message:

Add a look to the cache.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • nightshade.py

    r3 r4  
    11# -*- coding: iso-8859-1 -*- 
    22 
    3 import datetime 
     3import datetime, thread 
    44 
    55import cherrypy 
     
    136136 
    137137 
     138def getcachelock(thread_index): 
     139    cherrypy.thread_data.lock = thread.allocate_lock() 
     140cherrypy.server.on_start_thread_list.append(getcachelock) 
     141 
     142 
    138143class Page(object): 
    139144    def __init__(self, mimetype, encoding, expiretime=60*60, cachetime=20): 
     
    165170    @cherrypy.expose 
    166171    def default(self, *args, **kwargs): 
     172        now = datetime.datetime.utcnow() 
     173 
     174        lock = cherrypy.thread_data.lock 
    167175        try: 
    168             cachekey = self.getcachekey(*args, **kwargs) 
    169         except TypeError: # probably wrong arguments 
    170             raise cherrypy.NotFound 
    171  
    172         now = datetime.datetime.utcnow() 
    173  
    174         fetch = False 
    175         try: 
    176             (timestamp, data, lastmodified) = self.cache[cachekey] 
    177         except KeyError: 
    178             fetch = True 
    179         else: 
    180             if timestamp+self.cachetime < now: 
     176            lock.acquire() 
     177            try: 
     178                cachekey = self.getcachekey(*args, **kwargs) 
     179            except TypeError: # probably wrong arguments 
     180                raise cherrypy.NotFound 
     181     
     182            fetch = False 
     183            try: 
     184                (timestamp, data, lastmodified) = self.cache[cachekey] 
     185            except KeyError: 
    181186                fetch = True 
    182         if fetch: 
    183             (data, lastmodified) = self.getdata(*args, **kwargs) 
    184             if data is not None: 
    185                 if hasattr(data, "read"): 
    186                     data = data.read() 
    187                 self.cache[cachekey] = (now, data, lastmodified) 
     187            else: 
     188                if timestamp+self.cachetime < now: 
     189                    fetch = True 
     190            if fetch: 
     191                (data, lastmodified) = self.getdata(*args, **kwargs) 
     192                if data is not None: 
     193                    if hasattr(data, "read"): 
     194                        data = data.read() 
     195                    self.cache[cachekey] = (now, data, lastmodified) 
     196        finally: 
     197            lock.release() 
    188198 
    189199        if data is None: