gpt4 book ai didi

python - GAE - 如何组合多个异步 url 获取的结果?

转载 作者:行者123 更新时间:2023-11-30 23:37:58 25 4
gpt4 key购买 nike

我有一个 Google AppEngine(在 Python 中)应用程序,我需要执行 4 到 5 个网址提取,然后在将数据打印到回应。

我可以使用同步工作流程毫无问题地执行此操作,但由于我正在获取的 URL 彼此不相关或不依赖,因此异步执行此操作将是最理想(也是最快)的。

我已经阅读并重新阅读了文档 here ,但我只是不知道如何读取每个网址的内容。我还在网上搜索了一个小例子(这确实是我所需要的)。我见过this这是一个问题,但同样,这里他们没有提到任何有关读取这些单独的异步 url 获取内容的内容。

有人有关于如何使用 AppEngine 执行 4 或 5 次异步 URL 获取的简单示例吗?然后在将结果打印到响应之前合并结果?

这是我到目前为止所拥有的:

rpcs = []
for album in result_object['data']:
total_facebook_photo_count = total_facebook_photo_count + album['count']
facebook_albumid_array.append(album['id'])

#Get the photos in the photo album
facebook_photos_url = 'https://graph.facebook.com/%s/photos?access_token=%s&limit=1000' % (album['id'], access_token)

rpc = urlfetch.create_rpc()
urlfetch.make_fetch_call(rpc, facebook_photos_url)
rpcs.append(rpc)

for rpc in rpcs:
result = rpc.get_result()
self.response.out.write(result.content)

但是,它看起来仍然像这一行: result = rpc.get_result() 强制它等待第一个请求完成,然后是第二个请求,然后是第三个请求,依此类推。有没有一种方法可以简单地将收到的结果放入变量中?

谢谢!

最佳答案

example , text = result.content 是获取内容(正文)的位置。

要并行进行 url 获取,您可以设置它们,添加到列表中,然后检查结果。扩展已经提到的示例,它可能看起来像:

from google.appengine.api import urlfetch

futures = []
for url in urls:
rpc = urlfetch.create_rpc()
urlfetch.make_fetch_call(rpc, url)
futures.append(rpc)

contents = []
for rpc in futures:
try:
result = rpc.get_result()
if result.status_code == 200:
contents.append(result.content)
# ...
except urlfetch.DownloadError:
# Request timed out or failed.
# ...

concatenated_result = '\n'.join(contents)

在此示例中,我们组装了所有返回状态代码 200 的请求正文,并在它们之间使用换行符连接。

或者使用 ndb ,我个人对 GAE 上任何异步内容的偏好,例如:

@ndb.tasklet
def get_urls(urls):
ctx = ndb.get_context()
result = yield map(ctx.urlfetch, urls)
contents = [r.content for r in result if r.status_code==200]
raise ndb.Return('\n'.join(contents))

关于python - GAE - 如何组合多个异步 url 获取的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14944317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com