PYTHON · 비동기
TaskGroup (Python 3.11+)
asyncio.TaskGroup으로 구조적 동시성을 구현하여 태스크 라이프사이클을 안전하게 관리합니다.
비동기고급TaskGroup구조적 동시성ExceptionGroup3.11
핵심 설명
asyncio.TaskGroup으로 구조적 동시성을 구현하여 태스크 라이프사이클을 안전하게 관리합니다.
Python code
import asyncio
async def fetch(name: str, delay: float) -> str:
await asyncio.sleep(delay)
if name == "fail":
raise ValueError(f"{name} 실패!")
return f"{name} 완료 ({delay}s)"
async def main():
# TaskGroup: 모든 태스크가 완료될 때까지 대기
async with asyncio.TaskGroup() as tg:
task1 = tg.create_task(fetch("A", 1))
task2 = tg.create_task(fetch("B", 0.5))
task3 = tg.create_task(fetch("C", 1.5))
# TaskGroup 종료 후 결과 접근
print(task1.result())
print(task2.result())
print(task3.result())
# 에러 처리: ExceptionGroup
try:
async with asyncio.TaskGroup() as tg:
tg.create_task(fetch("ok", 0.5))
tg.create_task(fetch("fail", 0.3))
tg.create_task(fetch("ok2", 0.8))
except* ValueError as eg:
for err in eg.exceptions:
print(f" 에러: {err}")
asyncio.run(main())학습 팁
TaskGroup은 gather보다 안전합니다. 하나의 태스크가 실패하면 나머지도 자동 취소됩니다.
주의할 점
TaskGroup에서 발생하는 예외는 ExceptionGroup으로 래핑됩니다. except* 구문(3.11+)으로 처리해야 합니다.
자주 묻는 질문
TaskGroup (Python 3.11+)란 무엇인가요?
asyncio.TaskGroup 으로 구조적 동시성을 구현하여 태스크 라이프사이클을 안전하게 관리합니다.
TaskGroup (Python 3.11+) 학습 시 주의할 점은 무엇인가요?
TaskGroup 에서 발생하는 예외는 ExceptionGroup 으로 래핑됩니다. except* 구문(3.11+)으로 처리해야 합니다.