get_result()是Google App Engine中put_async()的必需调用

Ami*_*mir 14 python google-app-engine asynchronous google-cloud-datastore

随着GAE 1.5.0的新版本,我们现在可以轻松地进行异步数据存储调用.我们是否需要get_result()在调用' put_async ' 后调用?

例如,如果我有一个名为的模型MyLogData,我可以调用:

put_async(MyLogData(text="My Text"))
Run Code Online (Sandbox Code Playgroud)

在我的处理程序返回之前没有调用匹配get_result()?在将结果发送到客户端之前,GAE是否会自动阻止任何待处理的呼叫?

请注意,我并不真正关心错误条件.即我不介意其中一些失败.

Ami*_*mir 7

我不认为有任何确定的方法可以知道是否get_result()需要,除非GAE团队中有人验证了这一点,但我认为不需要.这是我测试它的方式.

我写了一个简单的处理程序

class DB_TempTestModel(db.Model):
    data = db.BlobProperty()

class MyHandler(webapp.RequestHandler):
    def get(self):
        starttime = datetime.datetime.now()
        lots_of_data = ' '*500000
        if self.request.get('a') == '1':
            db.put(DB_TempTestModel(data=lots_of_data))
            db.put(DB_TempTestModel(data=lots_of_data))
            db.put(DB_TempTestModel(data=lots_of_data))
            db.put(DB_TempTestModel(data=lots_of_data))
        if self.request.get('a') == '2':
            db.put_async(DB_TempTestModel(data=lots_of_data))
            db.put_async(DB_TempTestModel(data=lots_of_data))
            db.put_async(DB_TempTestModel(data=lots_of_data))
            db.put_async(DB_TempTestModel(data=lots_of_data))
        self.response.out.write(str(datetime.datetime.now()-starttime))
Run Code Online (Sandbox Code Playgroud)

我在高复制应用程序上运行了很多次.

数据总是存在,让我相信除非数据存储方面出现故障(不太可能),否则它将被写入.

这是有趣的部分.当用put_async()(?a=2)写入数据时,处理请求的时间平均大约是put()(?a=1)的2到3倍(不是一个非常科学的测试 - 只是眼睛看它).

cpu_msapi_cpu_ms是两个相同的?a=1?a=2.

从日志:

ms=440 cpu_ms=627 api_cpu_ms=580 cpm_usd=0.036244

VS

ms=149 cpu_ms=627 api_cpu_ms=580 cpm_usd=0.036244

在客户端,查看请求的网络延迟,它显示相同的结果,即"?a = 2"请求至少快2倍.绝对是客户端的胜利......但似乎在服务器端没有任何好处.

GAE团队的任何人都在关注评论?