Async HTTP sessions (aiohttp) use async context managers for connection pooling.
1import asyncio2import aiohttp34async def fetch_all(urls):5 async with aiohttp.ClientSession() as session:6 # Connection pool is managed automatically7 tasks = []8 for url in urls:9 task = asyncio.create_task(10 fetch_one(session, url)11 )12 tasks.append(task)1314 results = await asyncio.gather(*tasks)15 return results1617async def fetch_one(session, url):18 async with session.get(url) as response:19 return await response.text()2021async def main():22 urls = ["http://api.example.com/data"] * 1023 results = await fetch_all(urls)24 print(results)2526asyncio.run(main())
Benefits of session context manager: