【发布时间】:2014-06-26 21:09:16
【问题描述】:
我正在使用 Appengine 的内存缓存。
我有一个类TaskGroup,我将动态设置一个属性。
from mempo.models import Task, Order, TaskAction, TaskGroup
from google.appengine.ext import ndb
from google.appengine.api import memcache
tg = TaskGroup.query().fetch(1)[0]
print 1, tg
setattr(tg, TaskGroup.JSON_TASKS_KEY, {'hello': 'world'})
print 2, getattr(tg, TaskGroup.JSON_TASKS_KEY)
KEY = 'mc_key'
memcache.delete(KEY)
memcache.set(KEY, tg)
tg2 = memcache.get(KEY)
print 3, getattr(tg2, TaskGroup.JSON_TASKS_KEY)
这是交互式控制台的输出:
1 TaskGroup(key=Key('TaskGroup', 4504974016905216), order=Key('Order', 5491235947020288), order_entry_serial=u'fc5766b2bbad4905be8753f9a6300009', orphaned=False, state=TaskGroupState(UNSTARTED, 10))
2 {'hello': 'world'}
3Traceback (most recent call last):
File "/home/vng/google_appengine/google/appengine/tools/devappserver2/python/request_handler.py", line 216, in handle_interactive_request
exec(compiled_code, self._command_globals)
File "<string>", line 16, in <module>
AttributeError: 'TaskGroup' object has no attribute 'json_tasks'
AFAIK,pickle 转储属性也动态设置:
class Foo():
pass
f = Foo()
pickle.dumps(f)
Out[4]: '(i__main__\nFoo\np0\n(dp1\nb.'
In [5]: setattr(f, 'hello', 'world')
In [6]: pickle.dumps(f)
Out[6]: "(i__main__\nFoo\np0\n(dp1\nS'hello'\np2\nS'world'\np3\nsb."
谁能告诉我为什么 appengine 的内存缓存没有腌制我的 JSON_TASKS_KEY 属性?
【问题讨论】:
-
我不明白这与 memcache 有什么关系——据我所知,TaskGroup.JSON_TASKS_KEY 永远不会被放入 memcache ......但我当然不知道为什么会这样消失...
-
你能告诉我正在设置的属性的代码以及你如何排队任务吗?
标签: python google-app-engine memcached pickle