Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使延迟等待异步ndb调用最漂亮的方法是什么?_Python_Google App Engine_App Engine Ndb - Fatal编程技术网

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()