Files
flaskcache/flaskcache.py

39 lines
1.2 KiB
Python

from time import time
from threading import Lock
class FlaskCache:
def __init__(self, timeout=20):
self.timeout = timeout
self.cache = {}
self.lock = {}
def genpage(self, pagefunc, *args):
page = {}
try:
page["page"] = pagefunc(*args)
page["code"] = 200
except Exception as e:
page["page"] = "ERROR\n"
page["code"] = 500
page["time"] = time()
return(page)
def cachetime(self, pagename):
try:
delta = self.cache[pagename]["time"] + self.timeout - time()
except Exception as e:
delta = -1
return(delta)
def getpage(self, pagename, pagefunc, *args):
if pagename not in self.cache:
self.cache[pagename] = {}
if pagename not in self.lock:
self.lock[pagename] = Lock()
if (self.cachetime(pagename) <= 0):
self.lock[pagename].acquire()
if (self.cachetime(pagename) <= 0):
self.cache[pagename] = self.genpage(pagefunc, *args)
self.lock[pagename].release()
return(self.cache[pagename]["page"], self.cache[pagename]["code"])