gpt4 book ai didi

python - 单例的替代品?

转载 作者:太空狗 更新时间:2023-10-30 03:07:33 25 4
gpt4 key购买 nike

我是 Python 和 App Engine(以及服务器端!)新手,我正在尝试创建非常简单的 CMS。应用程序的每个部署都会有一个 - 而且只有一个 - 公司对象,从类似以下内容实例化:

class Company(db.Model):
name = db.StringPropery()
profile = db.TextProperty()
addr = db.TextProperty()

我正在努力提供便利来更新公司简介和其他详细信息。

我的第一个想法是拥有一个 Company 实体单例。但是看过了(虽然远未完全掌握)this thread我的印象是这样做很困难,也是不可取的。

然后我想,也许对于 CMS 的每次部署,我都可以一次性运行一个脚本(由一个完全模糊的 URL 触发),它只是实例化 Company。从那时起,我将使用 theCompany = Company.all()[0]

获取此实例

这是否可取?

然后我想起那个线程中有人建议只使用一个模块。所以我刚刚创建了一个 Company.py 文件并在其中插入了一些变量。我在 SDK 中尝试过这个,它似乎工作 - 令我惊讶的是,修改后的变量值在请求之间“幸存”。

请原谅我的无知,但是,我假设这些值只保存在内存中而不是磁盘上——不像数据存储的东西?这是一个可靠的解决方案吗? (模块变量是否在我应用程序脚本的所有调用的范围内?)

最佳答案

全局变量是“app-cached”。这意味着您的应用程序的每个特定实例将在请求之间记住这些变量的值。但是,当实例关闭时,这些值将丢失。因此,我认为您真的不想将这些值存储在模块级变量中(除非它们是不需要更新的常量)。

我认为您的原始解决方案可以正常工作。您甚至可以使用 remote API 创建原始实体工具,这样您就不需要模糊的页面来实例化唯一的 Company 对象。

如果您通过键检索单例 Company 实体,您还可以更快地检索它。

如果您需要经常检索此实体,则可以使用缓存技术避免往返数据存储区。最快的方法是在从数据存储中检索到 Company 实体后对其进行应用缓存。为了防止实体变得太过时,您还可以应用程序缓存上次检索实体的时间,如果该时间超过 N 秒,那么您可以从数据存储中重新获取它。有关此选项的更多详细信息以及它与替代方案的比较,请查看 Nick Johnson 的文章 Storage options on App Engine .

关于python - 单例的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4208390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com