여러 비동기 작업을 「동시에」 실행해 결과를 모으는 가장 흔한 패턴이 asyncio.gather입니다.
단일 await는 순차 실행이지만 gather는 진정한 병렬 효과를 냅니다.
기본 사용.
results = await asyncio.gather(fetch(u1), fetch(u2), fetch(u3)) — 셋이 동시에 시작, 모두 끝나면 결과 리스트로 받음.
순서는 인자 순서대로 보장.
리스트로 일괄.
urls = [...].
results = await asyncio.gather(*[fetch(u) for u in urls]).
100개 URL을 1줄로 동시 처리.
단, 너무 많으면 서버 부담·타임아웃 — semaphore로 동시성 제한 권장.
예외 처리.
기본은 「하나라도 예외나면 전체 실패」.
return_exceptions=True를 주면 예외도 결과 리스트에 포함되어 일부 실패해도 나머지 결과는 받음.
부분 성공이 필요한 작업에 유용.
gather vs 순차 await.
차이가 극적입니다.
100개 fetch를 순차로 하면 100배 느림.
항상 「독립적인 작업이면 gather」를 떠올리세요.
의존성이 있다면 await을 순차로 — 잘못된 gather는 결과 순서 꼬임.
한 줄 요약
asyncio.gather는 여러 비동기 작업 동시 실행 + 결과 모음.
return_exceptions=True로 부분 성공 허용.
독립적 작업은 무조건 gather가 답.
더 알아볼 것
- semaphore로 동시성 제한
- asyncio.wait — 더 세밀한 제어
- TaskGroup — Python 3.11+의 모던 패턴