Python 远程API非常慢
我将远程API用于一些实用程序任务,我注意到它比Appengine上运行的代码慢几个数量级。一个简单的get_by_idlist使用远程API需要几分钟,在Appengine上运行需要几秒钟 日志显示,远程API单独获取,每次需要几秒钟;而在Appengine上,几乎在同一时间检索整个对象列表Python 远程API非常慢,python,google-app-engine,Python,Google App Engine,我将远程API用于一些实用程序任务,我注意到它比Appengine上运行的代码慢几个数量级。一个简单的get_by_idlist使用远程API需要几分钟,在Appengine上运行需要几秒钟 日志显示,远程API单独获取,每次需要几秒钟;而在Appengine上,几乎在同一时间检索整个对象列表 有什么办法可以改善这种情况吗?嗯,我自己测试过,发现获取1000个实体需要很长时间。我觉得在这种情况下,远程api客户机对每个实体发出一个请求。这是因为数据存储API调用的默认选项已更改。通过在调用上设置
有什么办法可以改善这种情况吗?嗯,我自己测试过,发现获取1000个实体需要很长时间。我觉得在这种情况下,远程api客户机对每个实体发出一个请求。这是因为数据存储API调用的默认选项已更改。通过在调用上设置max_entity_groups_per_rpc config选项,可以加快调用。以下是一个例子:
config = db.create_config(max_entity_groups_per_rpc=50)
entities = MyModel.get_by_id(l, config=config)
# or
entities = db.get(key_list, config=config)
或者,使用键进行查询要快得多,因此如果您的键列表是连续的,您可以使用键范围构建查询,如:
MyModel.all().filter('__key__ >=', db.Key.from_path('MyModel', 1)).\
filter('__key__ <', db.Key.from_path('MyModel', 1001))
你可以解决这个问题。我自己测试过,发现获取1000个实体需要很长时间。我觉得在这种情况下,远程api客户机对每个实体发出一个请求。这是因为数据存储API调用的默认选项已更改。通过在调用上设置max_entity_groups_per_rpc config选项,可以加快调用。以下是一个例子:
config = db.create_config(max_entity_groups_per_rpc=50)
entities = MyModel.get_by_id(l, config=config)
# or
entities = db.get(key_list, config=config)
或者,使用键进行查询要快得多,因此如果您的键列表是连续的,您可以使用键范围构建查询,如:
MyModel.all().filter('__key__ >=', db.Key.from_path('MyModel', 1)).\
filter('__key__ <', db.Key.from_path('MyModel', 1001))
您可以解决这个问题。不要忘记remoteapi在本地执行您的代码,并且只调用appengine服务器进行数据存储/blobstore/等操作。因此,本质上,您运行的代码正在访问网络上的数据库。速度肯定慢了 不要忘记,remoteapi在本地执行代码,并且只调用appengine服务器进行数据存储/blobstore/等操作。因此,本质上,您运行的代码正在访问网络上的数据库。速度肯定慢了 名单有多大?测试时,您是否有任何活动实例在云上运行?启动实例通常需要多长时间?你在使用哪个运行时?用一个真正的解决方法更新了我的答案。列表有多大?测试时,您是否有任何活动实例在云上运行?启动实例通常需要多长时间?您使用的是哪个运行时?更新了我的答案,并提供了一个真正的解决方法。在我的测试中,远程API仍然对每个实体执行一个请求,尽管添加了配置参数。我相信get_by_id本质上是一个密钥查询——在API调用之前,id被转换成密钥。在我的测试中,尽管添加了配置参数,远程API仍然对每个实体执行一个请求。我相信get_by_id本质上是一个密钥查询——在API调用之前,id被转换成密钥。