如何在async方法中将结果存储在列表中?

时间:2017-04-05 08:54:59

标签: python asynchronous

我有以下为我生成数据的方法:

async def fetch_url(self, video_id):
    data = await self.s3.generate_presigned_url(...video_id...)
    return data

def convert_to_json(self, data):
    loop = asyncio.get_event_loop()
    tasks = []
    urls = [row[0] for row in data]
    for url in urls:
        tasks.append(fetch_url(url))
    loop.run_until_complete(asyncio.gather(*tasks))
    loop.close()

如何将fetch_url的结果存储在某个列表中?

1 个答案:

答案 0 :(得分:1)

asyncio.gather

  

...如果所有任务都成功完成,则返回的将来的结果是结果列表(按原始序列的顺序排列,不一定是结果到达的顺序)。 ...

也就是说,如果您await收集了结果,您将获得一个已提取的data

列表


run_until_complete

  

返回Future的结果,或者提出异常。

run_until_complete将返回结果gather,即提取的data列表。


存储的结果很简单:

...
all_data = loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
return all_data