谷歌应用引擎1.7.6 memcache查看器(Python)

时间:2013-04-01 14:08:38

标签: google-app-engine python-2.7 memcached pickle

在将Python Dev Appserver更新到Google App Engine 1.7.6(使用Python 2.7)后,我在使用memcache查看器时遇到了一些麻烦。

我的memcache似乎没有更新或无法读取。我试图用app引擎memcache查看器查看memcache但是当我输入memcache密钥时出现错误。

当我刷新缓存时,一切都正常进行,直到需要再次读取memcache ...

命中率和内存缓存大小正常增加,因此缓存中有一些内容。此外,当我恢复到应用程序引擎1.7.5一切正常。也许其他人有这个问题?

当我输入memcache密钥时,我得到以下内容:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.1\webapp2.py", line 1536, in __call__
    rv = self.handle_exception(request, response, e)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.1\webapp2.py", line 1530, in __call__
    rv = self.router.dispatch(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.1\webapp2.py", line 1278, in default_dispatcher
    return route.handler_adapter(request, response)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.1\webapp2.py", line 1102, in __call__
    return handler.dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\admin\admin_request_handler.py", line 80, in dispatch
    super(AdminRequestHandler, self).dispatch()
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.1\webapp2.py", line 572, in dispatch
    return self.handle_exception(e, self.app.debug)
  File "C:\Program Files (x86)\Google\google_appengine\lib\webapp2-2.5.1\webapp2.py", line 570, in dispatch
    return method(*args, **kwargs)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\admin\memcache_viewer.py", line 145, in get
    values['value'], values['type'] = self._get_memcache_value_and_type(key)
  File "C:\Program Files (x86)\Google\google_appengine\google\appengine\tools\devappserver2\admin\memcache_viewer.py", line 74, in _get_memcache_value_and_type
    except (pickle.UnpicklingError, AttributeError, EOFError, ImportError,
NameError: global name 'pickle' is not defined

我尝试在main.py中添加“import pickle”,但这是徒劳的。

我已经包含了一些我的代码示例,但希望这不是必要的,我希望它与应用程序引擎更新有关,而不是我的代码......

我的一些main.py文件:

#import pickle
from google.appengine.api import memcache
from google.appengine.ext import db

以及我如何处理memcache的示例函数:

def mc_get(key):
    a = memcache.get(key)
    if a:
        val = a
    else:
        val = None
    return val

def mc_set(key, val):
    memcache.set(key, val)

如果我想查询我的数据库中的用户,我使用:

def get_users(update=False):
    mc_key = 'USERS'
    entries = mc_get(mc_key)
    if update or entries is None:
        a = User.all()
        logging.error('DB---Q - Users')
        entries = list(a)
        memcache.set(mc_key, entries)
    return entries

更新: 我将“import pickle”添加到Google \ google_appengine \ google \ appengine \ tools \ devappserver2 \ admin \ memcache_viewer.py中的memcache_viewer.py文件中 (这是一个错误??)

现在当我输入memcache密钥时,我在memcache密钥输入字段下得到以下错误: 获取USERS时出错:无法从缓存中检索值:没有名为main

的模块

非常感谢任何帮助,提前谢谢。

1 个答案:

答案 0 :(得分:0)

我从旧的数据存储区API更改为NDB(更改代码的一些杂事)。自动缓存似乎已经解决了这个问题,这可能表明问题出在我的代码中,但仍然无法解释为什么在使用app引擎1.7.5而不是1.7.6时一切正常。

如果有人有替代方案,我会删除这个答案,只是想我会发布我的进展以防其他人遇到同样的问题。