Python 使延迟等待异步ndb调用最漂亮的方法是什么?
对Python 使延迟等待异步ndb调用最漂亮的方法是什么?,python,google-app-engine,app-engine-ndb,Python,Google App Engine,App Engine Ndb,对e的更改在SDK中被丢弃,可能在生产中也会被丢弃。解决这个问题的一个显而易见的方法是存储所有rpc并获取它们,但这并不完美 有没有办法使这个函数与ndb兼容 此函数用于代码的多个部分,正常请求是@ndb.toplevel,因此它们没有问题。您延迟的函数不能是@ndb.toplevel,但您可以调用以下函数: deferred.defer(f,e) function f(e): e.put_async() 有什么理由同时使用async和defer task吗?实际函数比这更复杂,asyn
e
的更改在SDK中被丢弃,可能在生产中也会被丢弃。解决这个问题的一个显而易见的方法是存储所有rpc并获取它们,但这并不完美
有没有办法使这个函数与ndb兼容
此函数用于代码的多个部分,正常请求是
@ndb.toplevel
,因此它们没有问题。您延迟的函数不能是@ndb.toplevel
,但您可以调用以下函数:
deferred.defer(f,e)
function f(e):
e.put_async()
有什么理由同时使用async和defer task吗?实际函数比这更复杂,async的性能总是更好或相等。我不确定,但sdk@ndb.tasklet功能看起来可以定义整个函数以运行async。因此,我想它应该像延迟的任务一样运行。感谢您的回答,因此可以递归使用ndb.toplevel,一个使用ndb.toplevel调用f的请求,它会产生问题吗?如果使用deferred.defer调用f,那么它在不同的请求上下文中运行,因此没有嵌套。(我不知道嵌套是否会导致问题。)
def f(e):
g(e)
@ndb.toplevel
def g(e):
e.put_async()