如何基于循环/生成器使用aiohttp批量获取多个URL?
异步流式处理领域对象的HTTP请求需求
我查阅到的所有使用aiohttp批量获取多URL的示例,均采用以下实现:
import asyncio import aiohttp import ssl async def fetch(session, url): async with session.get(url, ssl=ssl.SSLContext()) as response: return await response.json() async def fetch_all(urls, loop): async with aiohttp.ClientSession(loop=loop) as session: results = await asyncio.gather(*[fetch(session, url) for url in urls], return_exceptions=True) return results if __name__ == '__main__': loop = asyncio.get_event_loop() urls = url_list htmls = loop.run_until_complete(fetch_all(urls, loop)) print(htmls)
但在我的实际业务场景中,通常是通过异步生成器从数据库获取领域对象,每个对象包含URL属性,后续还需要访问该对象的其他属性,因此希望在循环中异步获取单个URL:
async for domain_obj in generator: url = domain_obj.url response = xxx # 此处需要异步获取单个URL # 使用response和domain_obj的其他属性进行后续处理
虽然可以先批量收集所有领域对象,再按照上述示例方式处理,但这种方案并不适合我的场景。
内容的提问来源于stack exchange,提问作者dragoon
相关产品推荐
相关产品推荐

