39 lines
1.2 KiB
Python
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"])
|