PHpullh
학습 라이브러리/Python/비동기 제너레이터

PYTHON · 비동기

비동기 제너레이터

async for와 비동기 제너레이터로 비동기 스트림 데이터를 처리합니다.

비동기고급async generator비동기 제너레이터async for

핵심 설명

async for와 비동기 제너레이터로 비동기 스트림 데이터를 처리합니다.

Python code

import asyncio

async def async_range(start: int, stop: int, delay: float = 0.1):
    """비동기 제너레이터"""
    for i in range(start, stop):
        await asyncio.sleep(delay)
        yield i

async def countdown(name: str, n: int):
    async for i in async_range(0, n, 0.2):
        print(f"  {name}: {n - i}")
    print(f"  {name}: 완료!")

async def main():
    # 비동기 컴프리헨션
    squares = [x ** 2 async for x in async_range(1, 6)]
    print(f"비동기 제곱: {squares}")

    # 비동기 필터링
    evens = [x async for x in async_range(1, 11) if x % 2 == 0]
    print(f"짝수: {evens}")

    # 여러 비동기 스트림 동시 처리
    await asyncio.gather(
        countdown("A", 3),
        countdown("B", 5),
    )

asyncio.run(main())

학습 팁

비동기 제너레이터는 웹소켓 메시지, SSE(Server-Sent Events), 실시간 로그 처리에 적합합니다.

주의할 점

비동기 제너레이터를 일반 for 루프로 순회하면 TypeError가 발생합니다. 반드시 async for를 사용하세요.

자주 묻는 질문

비동기 제너레이터란 무엇인가요?

async for 와 비동기 제너레이터로 비동기 스트림 데이터를 처리합니다.

비동기 제너레이터 학습 시 주의할 점은 무엇인가요?

비동기 제너레이터를 일반 for 루프로 순회하면 TypeError 가 발생합니다. 반드시 async for 를 사용하세요.