我的应用程序需要对每个请求执行许多数据存储操作。我想并行运行它们以获得更好的响应时间。
对于数据存储更新,我正在执行批量放置,因此它们都是异步发生的,从而节省了许多毫秒。 App Engine 允许 up to 500 entities 并行更新。
但是我还没有找到允许并行执行不同类型的数据存储提取的内置函数。
由于 App Engine 确实允许 urlfetch 调用 to run asynchronously ,我为每种类型创建了一个 getter URL,它将查询结果作为 JSON 格式的文本返回。现在我的应用程序可以对这些 URL 执行异步 urlfetch 调用,这可以并行化数据存储提取。
此技术适用于少量并行请求,但当尝试同时运行 5 或 10 个以上的这些 urlfetch 调用时,App Engine 会引发错误。
我现在只是在测试,所以每个 urlfetch 都是相同的查询;由于它们在小批量中运行良好,但开始因多个并发请求而失败,我认为它必须与异步 urlfetch 调用有关。
我的问题是:
get_result 中的文件“/base/python_lib/versions/1/google/appengine/api/apiproxy_stub_map.py”,第 501 行
返回 self.__get_result_hook(self)
_get_fetch_result 中的文件“/base/python_lib/versions/1/google/appengine/api/urlfetch.py”,第 331 行
引发下载错误(str(err))
InterruptedError: ('The Wait() 请求被另一个回调的异常中断:', DownloadError('ApplicationError: 5 ',))
最佳答案
由于 App Engine 允许异步 urlfetch 调用但不允许异步数据存储获取,因此我尝试使用 urlfetch RPC 从数据存储中并行检索。
缺乏异步数据存储获取是一个公认的问题:
http://code.google.com/p/googleappengine/issues/detail?id=1889
现在有一个允许异步查询的第三方工具:
http://code.google.com/p/asynctools/
“asynctools 是一个库,允许您并行执行 Google App Engine API 调用。API 调用可以混合在一起并排队,然后所有调用都并行启动。”
这正是我正在寻找的。
关于google-app-engine - App Engine 上的异步 urlfetch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1965297/