
asyncio 뽀개기 1 - Coroutine과 Eventloop
두줄요약
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 미보장

