1 import threading, weakref
4 __slots__ = ["p", "n", "id", "obj", "st", "lk"]
5 def __init__(self, id, c):
22 if self.n is not None:
32 if self.n is not None:
34 if self.p is not None:
43 def __init__(self, *, keep=1000):
46 self.mru = self.lru = None
48 self.lk = threading.Lock()
52 for i in range(self.n - n):
54 ent.obj = weakref.ref(ent.obj)
56 elif ent.st == "w" and ent.obj() is None:
62 def get(self, id, load=True):
65 ent = self.cur.get(id)
69 self.cur[id] = ent = entry(id, self)
70 ent.lk = lk = threading.Lock()
95 ret = ent.obj = self.load(id)
109 def put(self, id, ob):
112 ent = self.cur.get(id)
114 self.cur[id] = ent = entry(id, self)
117 self._trim(self.keep)
134 def remove(self, id):
137 ent = self.cur.get(id)