gpt4 book ai didi

python - 如何或何时正确使用 GAE @classmethod

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:16 25 4
gpt4 key购买 nike

我有这个谷歌应用程序引擎数据存储区 NDB 模型:

class pySessions(ndb.Model):
# sid is the key/id
data = ndb.Blobproperty(required=True)
expiry = ndb.DateTimeProperty(required=True)

@classmethod
def get_sid(cls, sid):
sid_key = ndb.Key(cls, sid)
return cls.query(cls.key == sid_key,
cls.expiry >= datetime.utcnow()).get()

为了获取特定的sid,我可以使用这样的东西:

data = pySessions.get_by_id(sid)
if session and session.expiry >= datetime.utcnow():
return session.data
return {}

或者我可以使用@classmethod get_sid

data = pySessions.get_sid(sid)

两者都可以工作,但在进行一些测试时,请注意@classmethod表现较慢,或者没有读取更新的 session 数据。

我正在使用基本计数器进行测试,但在递增之后,我正在重新加载(标题位置)页面,我在这里注意到,由于某种未知原因,使用@classmethod get_sid查询NBB是遇到一些问题,我可以让它工作的唯一方法是使用 pdb 调试器,因为它会“暂停”并允许代码缓慢读取数据。

知道使用 @classmethod 或自定义查询之间有什么区别吗?

最佳答案

我不确定为什么您认为速度差异与使用类方法有关。这两个方法正在做完全不同的事情:类方法正在执行查询(通过键和过期时间),而其他代码正在执行直接获取,这要快得多,但只有在以下情况下才返回到期时间比现在短。

查询总是比数据存储中的获取慢得多,但第二种方法的缺点是总是获取数据 - 因此会产生成本 - 即使过期日期已过。 p>

查询的另一个潜在缺点是查询(与获取不同)受最终一致性的影响,因此有可能看不到最近更新的数据。

关于python - 如何或何时正确使用 GAE @classmethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25118571/

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