Python asyncio 기초: 제너레이터, 코루틴 및 블로킹 IO 문제점

Source

  • Evernote/Inbox/Python 3, asyncio와 놀아보기 - SSUT Note.md

Summary

이 문서는 Python 3.4 이상에서 도입된 asyncio 라이브러리의 기본 개념을 설명합니다. asyncio를 이해하기 위한 전제로 제너레이터(yield)와 코루틴의 동작 원리(상태 유지, send/next)를 서브루틴과 비교하여 소개합니다. 또한 순차적인 블로킹 IO(Blocking IO) 방식의 비효율성(작업 대기 시간 증가)을 지적하고, 이를 해결하기 위한 대안으로 스레드(Thread) 기반 동시 실행의 필요성을 제시합니다.

Key Points

  • asyncio는 Python 3.4 내장 라이브러리(프로젝트명 Tulip)로, 비동기 IO를 통한 효율적인 동시 실행을 지원합니다.
  • 제너레이터는 yield 키워드를 통해 실행을 일시 중단하고 컨텍스트를 유지하며, next/send 메서드로 재개할 수 있는 이터레이터 객체입니다.
  • 코루틴은 진입점이 여러 개 있는 함수로, 중간 결과 반환 및 외부 인자 수신이 가능한 인터랙티브한 실행이 특징입니다.
  • 순차적 블로킹 IO는 한 작업 완료 전까지 다음 작업을 대기하므로 URL 증가 시 비효율적입니다.
  • 블로킹 IO의 한계를 극복하기 위해 스레드(Thread)를 이용한 병렬 처리가 대안으로 제시됩니다.