我正在使用 ndb 编写一个分析模型,该模型根据应用程序请求记录一些数据。每个请求通过ndb.put_async调用一个ndb请求来记录数据,而客户端不关心结果。本质上,我不希望应用程序请求等待保存统计数据以进行分析。
然而,我对官方文档的解释感到困惑。如果应用程序请求在 ndb 请求完成之前完成,是否仍能保证 ndb 请求完成?文档表明
如果请求处理程序存在得太早,则 put 可能永远不会发生
在什么标准下会发生这种情况?这是否意味着无论用户是否关心结果,都需要调用 future.get_result 来确保执行 ndb 请求?
原始文档(https://developers.google.com/appengine/docs/python/ndb/async https://developers.google.com/appengine/docs/python/ndb/async) says:
在这个例子中,调用 future.get_result 有点愚蠢:
应用程序从不使用 NDB 的结果。该代码就在那里
确保请求处理程序在 NDB put 之前不会退出
完成;如果请求处理程序退出得太早,则 put 可能永远不会
发生。为了方便起见,您可以用以下方式装饰请求处理程序
@ndb.toplevel。这告诉处理程序不要退出,直到它
异步请求已完成。这反过来又可以让你送走
请求而不担心结果。
如果应用程序请求在 ndb 请求完成之前完成,是否仍能保证 ndb 请求完成?
No.
这是否意味着无论用户是否关心结果,都需要调用 future.get_result 来确保执行 ndb 请求?
基本上是的,但是为了方便起见,您可以使用 ndb.toplevel 装饰器,这样您就不必显式等待结果。也就是说,我认为这不是你想要的。
大概任务队列 https://developers.google.com/appengine/docs/python/taskqueue/就是你想要的。请检查一下。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)