Example #1
0
class PhotoCache:
    def __init__(self, maxLen):
        self.l = ReadWriteLock()
        self.nextT = int((time() - 1312742671) * 4)
        self.maxLen = maxLen
        self.m = {}
        self.s = []
    
    def update(self, photoId, data):
        self.l.acquireWrite()
        if photoId in self.m:
            oldT, oldData = self.m[photoId]
            data['tagging_id'] = oldData['tagging_id']
            newInfo = (oldT, data)
        else:
            data['tagging_id'] = self.nextT
            newInfo = (self.nextT, data)
            self.nextT = self.nextT + 1
            self.s.append(photoId)
            if len(self.s) > self.maxLen:
                self.s.pop(0)
        self.m[photoId] = newInfo
        self.l.release()
        return newInfo
    
    def dumpLatest(self, n):
        self.l.acquireRead()
        print >> sys.stderr, map(lambda photoId: self.m[photoId][1]['tagging_id'], self.s[-n:])
        self.l.release()
    
    def getLatest(self, n):
        self.l.acquireRead()
        output = []
        for photoId in self.s[-n:]:
            output.append(self.m[photoId][1])
        self.l.release()
        return output