비동기 문법 (syntax)

async def

  • 비동기 함수(코루틴)을 정의하는 문법
  • 호출 시 즉시 실행이 아닌 코루틴 객체 반환 await
  • 현재 코루틴을 중단하고
  • 이벤트 루프에 제어권 반환
  • 다른 task 실행 가능 async with
  • 비동기 컨텍스트 매니저 문법
  • 자원 획득 / 해제를 await 포함해서 안전하게 처리

비동기 실행 모델 (Execution Model)

asyncio

  • python 비동기 표준 라이브러리
  • 역할
    • 이벤트 루프 제공
    • task 스케쥴링
    • await 지점에서 task 전환
asyncio.run(main())

병렬 실행 단위

Task/Coroutine

  • async def 호출 결과
  • 실행 전 상태의 작업 단위 task = work(1)

*tasks

  • task 리스트를 개별 인자로 풀어서 전달함
tasks = [work(1), work(2)]
await asyncio.gather (*tasks)
 
# 사실상 work(1), work(2)를 풀어서 넣는 것과 동일함

동시성 제어 도구 (슬롯 개수 제한)

Semaphore

  • 동시 실행 가능한 슬롯 개수 제한
  • worker 개념 아님
  • 자리(slot) 개념

자리 있으면 실행 없으면 대기 끝나면 자리 반납