问题分析
open too many files
是一种常见的由于创建过多socket
而导致的异常。
asyncio
默认为每一次请求创建一个session
,所以我们可以通过为多个请求共享同一个session
(显式为gether
创建session
)解决该问题。
解决方案
async def get(url, session):
async with session.get(url) as response:
return await response
async def tasks(urls):
async with aiohttp.ClientSession() as session:
return await asyncio.gather(*[get(url) for url in urls])