Initial commit
This commit is contained in:
38
flaskcache.py
Normal file
38
flaskcache.py
Normal file
@@ -0,0 +1,38 @@
|
||||
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"])
|
Reference in New Issue
Block a user