Google app engine GAE标准异步获取不工作
我正在跟踪文档,但看起来请求仍在同步进行 这是我的密码:Google app engine GAE标准异步获取不工作,google-app-engine,asynchronous,Google App Engine,Asynchronous,我正在跟踪文档,但看起来请求仍在同步进行 这是我的密码: rpcs = [] for url in urls: rpc = urlfetch.create_rpc() urlfetch.make_fetch_call(rpc, url) rpcs.append(rpc) result = [] for rpc in rpcs: result.append(rpc.get_result().content) return result 我使用请求进行了一些分析和
rpcs = []
for url in urls:
rpc = urlfetch.create_rpc()
urlfetch.make_fetch_call(rpc, url)
rpcs.append(rpc)
result = []
for rpc in rpcs:
result.append(rpc.get_result().content)
return result
我使用请求进行了一些分析和比较。get
和它们花费的时间完全相同
我获取的URL来自不同的站点,因此我确信在服务器端没有并发限制
在GAE标准上运行的Python2.7可以正常工作,但出于某种原因,只能通过回调实现。此外,它仅适用于生产,不适用于当地环境D.以下是工作代码:
from google.appengine.api import urlfetch
import functools
class ClassName(object):
responses = []
def fetch_concurrent_callback(self, rpc):
response = rpc.get_result()
json_response = json.loads(response.content)
self.responses.append(json_response)
def fetch_concurrent(self, urls):
rpcs = []
for url in urls:
rpc = urlfetch.create_rpc()
rpc.callback = functools.partial(self.fetch_concurrent_callback, rpc)
urlfetch.make_fetch_call(rpc, url)
rpcs.append(rpc)
for rpc in rpcs:
rpc.wait()
return self.responses
我自己遵循了命令,可以确认调用是异步进行的。为什么您认为请求仍然是同步的?我相信你没有抓住要点。异步和同步之间的区别在于,同步请求会阻止客户端,直到操作完成,而另一个客户端则不会。请@komarkovich tx花时间研究一下。我完全理解异步与同步。我可能没有弄清楚的是urlfetch服务是否允许并发请求。通过查看日志,我可以看出urlfetch请求不是并发的。它遍历每个url,并在移动到下一个url之前等待响应。我还可以通过这样一个事实来判断,其中一个fetch调用平均需要200毫秒。Simple math说,如果同时执行,则6个此类调用最多需要200/300毫秒,而操作需要1200毫秒(
urlfetch
请求是并发的。请发布与此相矛盾的日志和代码,以便我可以查看。@komarkovich在回答中添加了工作代码。再次感谢您查看。请您编辑评论,以供社区将来参考,并提供您为使其工作所做的更多详细信息。谢谢。