gpt4 book ai didi

python - 无法让 Beaker 缓存工作

转载 作者:太空宇宙 更新时间:2023-11-04 09:20:37 24 4
gpt4 key购买 nike

我正在尝试使用 Beaker 的缓存库,但无法正常工作。

这是我的测试代码。

class IndexHandler():
@cache.cache('search_func', expire=300)
def get_results(self, query):
results = get_results(query)
return results

def get(self, query):
results = self.get_results(query)
return render_index(results=results)

我试过 Beaker 文档中的示例,但我只看到了

<type 'exceptions.TypeError'> at /
can't pickle generator objects

显然我遗漏了一些东西,但我找不到解决方案。

顺便说一句,如果缓存类型设置为"file",就会出现这个问题。

最佳答案

如果您将烧杯配置为保存到文件系统,您可以很容易地看到每个参数也被 pickle 了。示例:

tp3
sS'tags <myapp.controllers.tags.TagsController object at 0x103363c10> <MySQLdb.cursors.Cursor object at 0x103363dd0> apple'
p4

请注意,缓存“key”不仅包含我的关键字“apple”,还包含特定于实例的信息。这非常糟糕,因为尤其是“ self ”在调用之间不会相同。缓存每次都会导致未命中(并且会被无用的键填满。)

带有缓存注解的方法应该有对应于你所想的任何“键”的参数。换句话说,假设您想要存储“John”对应于值 555-1212 的事实,并且您想要缓存它。您的函数不应将字符串以外的任何内容作为参数。您传入的任何参数在调用之间应该保持不变,因此像“self”这样的东西是不好的。

实现此功能的一种简单方法是内联 函数,这样您就不需要传递键以外的任何其他内容。例如:

def index(self):

# some code here

# suppose 'place' is a string that you're using as a key. maybe
# you're caching a description for cities and 'place' would be "New York"
# in one instance

@cache_region('long_term', 'place_desc')
def getDescriptionForPlace(place):
# perform expensive operation here
description = ...
return description

# this will either fetch the data or just load it from the cache
description = getDescriptionForPlace(place)

您的缓存文件应类似于以下内容。请注意,只有“place_desc”和“John”被保存为键。

tp3 
sS'place_desc John'
p4

关于python - 无法让 Beaker 缓存工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3170882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com