Nâng CaoPython iconPython

Async context managers và async generators — viết thế nào?

Async equivalents của context managers và generators cho async code:

python
from contextlib import asynccontextmanager

# Async context manager với @asynccontextmanager
@asynccontextmanager
async def managed_connection(pool):
    conn = await pool.acquire()
    try:
        yield conn
    finally:
        await pool.release(conn)

async with managed_connection(pool) as conn:
    await conn.execute(query)

# Class-based async context manager
class AsyncDBSession:
    async def __aenter__(self):
        self.session = await create_session()
        return self.session

    async def __aexit__(self, exc_type, exc_val, exc_tb):
        if exc_type:
            await self.session.rollback()
        else:
            await self.session.commit()
        await self.session.close()

# Async generator
async def fetch_pages(url: str):
    page = 1
    while True:
        data = await httpx.get(f"{url}?page={page}")
        if not data: break
        yield data
        page += 1

async for page_data in fetch_pages("https://api.example.com/users"):
    process(page_data)

Xem toàn bộ Python cùng filter theo level & chủ đề con.

Mở danh sách Python