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是否会自动阻止任何待处理的呼叫?
请注意,我并不真正关心错误条件.即我不介意其中一些失败.
我不认为有任何确定的方法可以知道是否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_ms并api_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团队的任何人都在关注评论?
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |