PHpullh
학습 라이브러리/Python/TaskGroup (Python 3.11+)

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())

학습 팁

TaskGroupgather보다 안전합니다. 하나의 태스크가 실패하면 나머지도 자동 취소됩니다.

주의할 점

TaskGroup에서 발생하는 예외는 ExceptionGroup으로 래핑됩니다. except* 구문(3.11+)으로 처리해야 합니다.

자주 묻는 질문

TaskGroup (Python 3.11+)란 무엇인가요?

asyncio.TaskGroup 으로 구조적 동시성을 구현하여 태스크 라이프사이클을 안전하게 관리합니다.

TaskGroup (Python 3.11+) 학습 시 주의할 점은 무엇인가요?

TaskGroup 에서 발생하는 예외는 ExceptionGroup 으로 래핑됩니다. except* 구문(3.11+)으로 처리해야 합니다.

Continue Learning

Python 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.