我正在使用ndb编写一个分析模型,该模型会记录每个应用程序请求的一些数据。每个请求都会通过ndb.put_async调用ndb请求来记录数据,而客户端不关心结果。实质上,我不希望应用程序请求等待保存用于分析的统计数据。ndb异步保证在应用程序请求完成后执行?
但是,我对官方文档的解释感到困惑。如果一个应用程序请求在ndb请求结束之前完成,ndb请求是否仍能保证完成?文档表示
如果请求处理程序太早存在,看跌期权可能永远不会发生
在这种情况会发生什么样的标准?这是否意味着无论用户是否关心结果,都需要调用future.get_result来确保ndb请求被执行?
的原始文件(https://developers.google.com/appengine/docs/python/ndb/async)说:
在这个例子中,这是一个有点傻叫future.get_result:在 应用程序从不使用从NDB结果。该代码仅在 以确保在NDB将 完成之前请求处理程序不会退出;如果请求处理器过早退出,则可能永远不会发生 。作为一种方便,您可以用 @ ndb.toplevel来装饰请求处理程序。这告诉处理程序不要退出,直到其异步请求完成 。这又可以让你发送 的请求,而不用担心结果。
为了澄清,可能不会发生的原因是NDB的自动配料功能。表示put的Future可以位于自动分配器的队列中,并且@ ndb.toplevel装饰器是唯一可靠的方法(除了显式调用get_result())以确保坐在这样的队列中的所有put请求都被发送到服务器。 – 2012-07-24 19:17:14