목록 보기
asyncio 뽀개기 2 - Future의 활용
백엔드

asyncio 뽀개기 2 - Future의 활용

버즈빌
버즈빌
2022년 4월 4일

두줄요약

asyncio Future의 완료 콜백과 직접 발행 방식을 설명했습니다. busy waiting 없이 Future 기반 Semaphore를 구현하는 흐름을 다뤘습니다.

구조와 흐름

  • Future를 비동기 연산의 미래 결과를 담고 완료 상태를 제어하는 awaitable 객체로 설명
  • asyncio.create_task()로 생성한 Future에 완료 콜백을 등록해 작업 시간·결과·예외 관찰
  • Semaphore 대기열에 Future를 발행하고 release()에서 set_result()로 대기 작업 재개

선택 이유

  • 작업 본문과 모니터링 로직 분리를 통한 단일 책임 유지
  • polling 기반 busy waiting 제거와 Eventloop 오버헤드·재개 지연 감소
  • Queue, gather, as_completed, Semaphore 등 asyncio 유틸의 Future 기반 이해

주의할 점

  • asyncio.Future와 concurrent.futures.Future의 비호환성, 필요 시 asyncio.wrap_future() 사용
  • 콜백 실행 시점·순서의 명세상 미보장, 순서 보장 필요 시 별도 제어 장치 필요
  • Future 직접 생성보다 Eventloop 최적화 구현체를 고려한 loop.create_future() 사용

다음 읽기

#Python 주제를 이어서 읽기

asyncio 뽀개기 2 - Future의 활용

asyncio Future를 단순 await 이상으로 활용하는 방법을 소개합니다. Future 생성과 콜백 등록을 통한 비동기 흐름 제어를 다룹니다.

버즈빌
버즈빌
백엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...