Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.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 远程API非常慢_Python_Google App Engine - Fatal编程技术网

Python 远程API非常慢

Python 远程API非常慢,python,google-app-engine,Python,Google App Engine,我将远程API用于一些实用程序任务,我注意到它比Appengine上运行的代码慢几个数量级。一个简单的get_by_idlist使用远程API需要几分钟,在Appengine上运行需要几秒钟 日志显示,远程API单独获取,每次需要几秒钟;而在Appengine上,几乎在同一时间检索整个对象列表 有什么办法可以改善这种情况吗?嗯,我自己测试过,发现获取1000个实体需要很长时间。我觉得在这种情况下,远程api客户机对每个实体发出一个请求。这是因为数据存储API调用的默认选项已更改。通过在调用上设置

我将远程API用于一些实用程序任务,我注意到它比Appengine上运行的代码慢几个数量级。一个简单的get_by_idlist使用远程API需要几分钟,在Appengine上运行需要几秒钟

日志显示,远程API单独获取,每次需要几秒钟;而在Appengine上,几乎在同一时间检索整个对象列表


有什么办法可以改善这种情况吗?

嗯,我自己测试过,发现获取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被转换成密钥。