코루틴은 제너레이터에서 어떻게 진화했는가?

매일 공부(ML)·2023년 4월 24일
0

Fluent Python

목록 보기
113/130

제어 흐름

코루틴

영사전에서 yield는 생산한다와 양보한다는 두 가지 뜻을 볼 수 있는데, 파이썬의 제너레이터에서 yield 키워드를 사용할 땐 두 가지 의미가 모두 적용된다.

yied item 문장은 next()의 호출자가 받을 값을 생성하고, 양보하고, 호출자가 진행하며 또 다른 값을 소비할 준비가 되어 다음번 next()를 호출할 때까지 제너레이터 실행을 중단하여 호출자가 제너레이터에서 값을 꺼내온다.

yield 키워드 뒤에 표현식이 없으면 제너레이터는 None을 생성하고, 호출자가 next() 대신 값을 전송하는 send()를 호출하면 코루틴이 호출자료부터 데이터를 받을 수 있다.

코루틴은 제너레이터에서 어떻게 진화했는가?

코루틴의 기반 구조는 파이썬 2.5에 구현된 'PEP 342- 향상된 제너레이터를 통한 코루틴 제안서에 설명되어 있고, yield 키워드를 표현식에 사용할 수 있게 되었으며, send() 메서드가 제너레이터 API에 추가되었다.

제너레이터의 호출자는 send()를 이용해서 제너레이터 함수 내부의 yield 표현식의 값이 데이터를 전송할 수 있고, 제너레이터가 호출자에 데이터를 생성해주고 호출자로부터 데이터를 받으면서 호출자와 협업하는 프로시저인 코루틴이 된다.

profile
성장을 도울 아카이빙 블로그

0개의 댓글