python - 在请求之间存储 GAE App 设置 : use webapp2 registry?

标签 python google-app-engine webapp2 app-engine-ndb

我将 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属性。

  1. get_settings 在注册表中写入设置实体并尝试从那里检索它是否是个好主意,仅使用 NDB/memcache 作为后备?

  2. 这就是注册表的用途吗?该文档只有延迟导入的示例。

最佳答案

快速浏览一下源代码: 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/

相关文章:

java - 将具有完全匹配(像素到像素)重叠的图像拼接在一起

python - 从对象列表创建动态级别嵌套字典?

python - 如何在版本高于 v7.3 的 MATLAB 中保存大 mat 文件并在 Python 中读取

java - 禁用谷歌云存储上的文件缓存(灵活的应用程序引擎java)

java - 将字符串转换为 Long (java) 和 Google 的 personID

google-app-engine - 在 Datastore 与 Blobstore 中存储文件的成本

google-app-engine - 如何解决 UnicodeDecodeError?

python - Jinja2 模板子目录

python - 将列值转换为整数列 - Pandas

python - Google App Engine 中的页面重定向页面