我将 Google App Engine 与 webapp2 框架 (Python) 结合使用。
几乎每个对我的应用程序的请求都需要考虑一些很少更改的设置。我当前的实现有一个类
class Settings(ndb.Model):
# a few ndb.KeyProperty and ndb.BooleanProperty types
并且每个请求处理程序都使用一个函数
def get_settings():
s = Settings.get_by_id('settings')
if not s:
s = Settings(id='settings')
s.put()
return s
检索 ID 为“settings”的单个实体。 NDB自动将这个entity存在memcache中,所以功能还是挺快的,不过今天发现了webapp2的registry属性。
让
get_settings
在注册表中写入设置实体并尝试从那里检索它是否是个好主意,仅使用 NDB/memcache 作为后备?这就是注册表的用途吗?该文档只有延迟导入的示例。
最佳答案
快速浏览一下源代码: http://webapp-improved.appspot.com/_modules/webapp2.html#WSGIApplication
注册表是一个字典,位于 WSGIApplication 对象的本地。您将在每个正在运行的 GAE 实例上获得一个单独的 WSGIApplication 对象。因此,如果后续 HTTP 请求命中不同的实例,它们将获得不同的 WSGIApplication 对象,从而获得不同的注册表。它也不在内存缓存中的多个实例之间共享。
注册表漂亮地替换了全局变量。在 App Engine 中使用全局变量有点危险,因为实例之间不共享值。一个常见的用途是缓存需要时间初始化的数据或对象。例如,如果您使用了很多正则表达式,您可以在第一次使用它们时编译它们,并将它们保存在注册表中,这样您就不需要在以后的请求中重新编译它们。
就存储设置而言,这可能不是一个好主意。可以做到这一点,前提是您可以在每次更改设置时重置每个实例(以及该实例的注册表)。
关于python - 在请求之间存储 GAE App 设置 : use webapp2 registry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19246859/