값 하나를 얻는 데 I/O가 필요할 수 있어
동기 반복자는 next가 바로 값을 주지만, 네트워크나 센서 흐름은 다음 값을 기다려야 해. 비동기 반복은 __aiter__와 __anext__, async for로 그 기다림을 규약 안에 넣어.
비동기 제너레이터가 가장 간단해
async def 안에서 yield하면 비동기 제너레이터가 돼. 값을 내기 전에 await할 수 있고, 소비자는 비동기 for로 받아. 비동기 컴프리헨션으로 결과를 모을 수도 있어.
상태와 제어가 많으면 클래스로
재시도·설정·수명처럼 명시적 상태가 필요하면 __aiter__/__anext__를 가진 클래스를 쓸 수 있어. 끝에서는 StopAsyncIteration을 내야 하며, 동기 StopIteration과 섞으면 규약이 깨져.
원칙: 비동기 반복은 값을 흘려보내는 규약에 기다림을 더한 것이지, 자동 병렬 처리 장치가 아니야.