목록 보기
asyncio 뽀개기 1 - Coroutine과 Eventloop
백엔드

asyncio 뽀개기 1 - Coroutine과 Eventloop

버즈빌
버즈빌
2022년 3월 30일

두줄요약

asyncio의 코루틴과 Eventloop로 10초 주기 Job을 동시 실행하는 방식을 설명했습니다. `await`와 `create_task()`의 실행권 및 대기 차이를 정리했습니다.

구조와 흐름

  • 10초 주기 Job 생성과 Job별 랜덤 실행 시간의 동시 처리 요구사항
  • asyncio.create_task()로 코루틴을 Eventloop에 등록하고, main()은 다음 주기까지 유지
  • asyncio.run()으로 최상위 main() 코루틴 실행

핵심 내용

  • await 시 Awaitable 등록 후 실행권을 Eventloop에 반환하고 완료까지 대기
  • run_job() 호출만으로는 코루틴 객체만 생성되며 Eventloop 등록 없이는 미실행
  • Task가 Future를 상속하며 Coroutine·Future·Task 모두 Awaitable 범주

선택 이유

  • Job 완료를 기다리지 않고 10초마다 새 Job 등록을 위한 create_task() 선택
  • 고정 개수 작업 완료 대기에는 gather, wait, as_completed() 활용 가능

주의할 점

  • 단일 Eventloop의 비선점형 cooperative multitasking 특성
  • await·return으로 실행권을 반납하지 않는 blocking 코드의 다른 코루틴 지연
  • 멀티스레드 환경에서 asyncio 동기화 프리미티브의 thread-safe 미보장

다음 읽기

#Python 주제를 이어서 읽기

asyncio 뽀개기 2 - Future의 활용

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

버즈빌
버즈빌
백엔드

댓글 0개

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

댓글을 불러오는 중...