【发布时间】:2014-02-15 00:45:06
【问题描述】:
我需要缓存一些生成的 HTML 文件以加快我的 web 服务的查看过程。我知道哪些信息可以被缓存,哪些不能,但我正在努力实现。
我想过这样的装饰器:
cache = {}
def cached(c):
if c not in cache:
cache[c] = {}
def cached_wrapper(func):
def inner(*args, **kwargs):
if args[0] in cache[c]:
print("Cache hit --> %s" %cache[c][args[0]])
else:
cache[c][args[0]] = func(*args, **kwargs)
return cache[c][args[0]]
return inner
return cached_wrapper
@route("/some/file/<id>")
@cached("some-cache")
def get_some_file(id):
# templating goes here...
return "[...]"
在本例中,存储是字典,但可以轻松扩展到基于文件的存储或数据库。
但问题是:这真的是个好主意吗?如何更好或更轻松地实现文件缓存?
我不想在 python 代码前面使用其他服务,因为应用程序应该独立运行。
【问题讨论】:
-
为了获得更多的灵活性,您可以查看dogpile.cache 之类的内容。