gpt4 book ai didi

python - App Engine Dev Server 数据存储更新速度不够快?

转载 作者:行者123 更新时间:2023-11-28 20:47:34 25 4
gpt4 key购买 nike

问题:数据存储更新太慢——提交创建实体的表单后,需要在显示数据存储中实体的结果页面上点击重新加载。

预期行为:实体应该出现在查询中,因为我正在为我的数据存储使用 NDB,它会自动缓存内容。

问题重现步骤

  1. 在 GoogleAppEngineLauncher 1.8.3 for Mac(我的操作系统版本是 10.8.4)中创建一个默认项目并将下面的代码粘贴到“main.py”中
  2. 运行项目并访问根 URL。
  3. 在表单中输入一个数字,然后点击提交。
  4. 您会看到文本“这是实体列表:...结束列表。”
  5. 在您的浏览器上点击重新加载。
  6. 现在您将看到文本“这是一个实体列表:[您输入的数字] ...结束列表。”

预期行为的解释

由于 NDB 自动使用内存缓存,因此不应发生第 4 步和第 5 步。在您点击表单上的提交后,您输入的数字应该会显示出来。我也观察到了常规应用引擎数据库的这种行为,我知道我可以使用内存缓存来解决这个问题。

这里有一些代码,您可以将其放入 AppEngineLauncher 创建的默认 main.py 中,该代码会重现此问题:

import webapp2
from google.appengine.ext import ndb

class SmallModel(ndb.Model):
n = ndb.IntegerProperty(required=True)
stamp = ndb.DateTimeProperty(auto_now_add=True)

class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world. Simple form. <form method="post"><input name="n" type="number"><input type="submit"></form>')
def post(self):
entity = SmallModel(n=int(self.request.get('n')))
entity.put()
self.redirect('/list')

class List(webapp2.RequestHandler):
def get(self):
self.response.out.write("here's a list of entities:")
entities = SmallModel.query()
for entity in entities.iter():
self.response.out.write(" %s " % entity.n)
self.response.out.write("...end list.")

app = webapp2.WSGIApplication([
('/', MainHandler),
('/list',List)
], debug=True)

任何帮助/建议?先感谢您!我已经能够在我测试的两个浏览器——Chrome 和 Safari 中重现这个问题。

最佳答案

我设法获得了预期的行为,更新后的代码如下。我从具有我期望的行为的“留言簿”示例代码中得到提示,并设置了一个父键。我还深入研究了 NDB 文档。设置父键可实现我期望的一致性,但将写入限制为每秒一次(我假设这意味着给定父键的所有子项,而不是给定模型的所有实体)。

这是我为消除步骤 4 和 5 所做的更改。我只是在新实体上设置父键,并使用该父键执行祖先查询。 (当然,这是用于说明要点的极简代码,我对创建数字列表的模型没有真正的兴趣。;))

import webapp2
from google.appengine.ext import ndb

def parent_key():
return ndb.Key('My','Entities')

class SmallModel(ndb.Model):
n = ndb.IntegerProperty(required=True)
stamp = ndb.DateTimeProperty(auto_now_add=True)

class MainHandler(webapp2.RequestHandler):
def get(self):
self.response.write('Hello world. Simple form. <form method="post"><input name="n" type="number"><input type="submit"></form>')
def post(self):
entity = SmallModel(parent=parent_key(),n=int(self.request.get('n')))
entity.put()
self.redirect('/list')

class List(webapp2.RequestHandler):
def get(self):
self.response.out.write("here's a list:")
entities = SmallModel.query(ancestor=parent_key())
for entity in entities.iter():
self.response.out.write(" %s " % entity.n)
self.response.out.write("...end list.")

app = webapp2.WSGIApplication([
('/', MainHandler),
('/list',List)
], debug=True)

感谢阅读和参与。

关于python - App Engine Dev Server 数据存储更新速度不够快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563760/

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