Advanced Async Patterns
Async generators, context managers, and concurrency patterns.
Overview
Master advanced async patterns.
Async Generators
import asyncio
async def async_range(n):
for i in range(n):
await asyncio.sleep(0.1)
yield i
async def main():
async for value in async_range(10):
print(value, end=" ")
asyncio.run(main())
Async Context Managers
import asyncio
from contextlib import asynccontextmanager
@asynccontextmanager
async def database_connection():
conn = await create_connection()
try:
yield conn
finally:
await conn.close()
async def main():
async with database_connection() as conn:
result = await conn.execute("SELECT * FROM users")
print(result)
Task Groups
import asyncio
async def fetch(url):
await asyncio.sleep(1)
return f"Data from {url}"
async def main():
urls = ["url1", "url2", "url3"]
async with asyncio.TaskGroup() as tg:
tasks = [tg.create_task(fetch(url)) for url in urls]
results = [task.result() for task in tasks]
print(results)
asyncio.run(main())
Practice
Build an async web scraper with task groups.