Beaker Cache抱怨TypeError

时间:2011-02-19 03:10:38

标签: python caching beaker

Beaker缓存会引发TypeError。我在Google上搜索过,甚至跟踪过烧杯的问题跟踪器,却找不到任何东西。

我像以下方法一样缓存查询

@staticmethod
def get_queries(query):
    @cache.cache(query, type = 'file', expire = 300)
    def load(query):
        entries = db.get_expensive_query(query)
        return entries
    return load(query)

然而,当我运行程序时,这就是我收到的内容;

  File "/Users/ivan/project/controller/caching.py", line 15, in get_queries
      return load(query)
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 417, in cached
    return cache[0].get_value(cache_key, createfunc=go)
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 214, in get
    return self._get_value(key, **kw).get_value()
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 256, in get_value
    if not self._is_expired(stored, expired):
  File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 245, in _is_expired
    time.time() >= expiretime + storedtime
TypeError: cannot concatenate 'str' and 'float' objects

我做错了什么或这是一个烧杯的错误?

1 个答案:

答案 0 :(得分:0)

您的代码调用cache.cache并使用整数表示expire,这是正确的,但很明显expiretime或storedtime用字符串清理。 [从错误消息中它必须是到期时间。 - 所以这就是我认为发生的事情:

(1)您调用了cache.cache,其字符串在某个时刻到期。 [也许甚至从CacheManager中的默认cache.expire选择,不确定。]

(2)您修复了错误,生成了您提交的代码(适用于我)。

(3)您重新编写代码而不删除缓存目录,因此它以某种方式获取了之前的状态。

我可以按照上述处方重现您的错误。你能删除你的缓存(cache.data_dir和cache.lock_dir中的所有内容)并再试一次吗?