파이썬 코루틴, 제너레이터 간단 요약

2017-07-25

파이썬을 공부하면서 코루틴, 제너레이터에 관한 글을 많이 봤는데

대략적인 개념만 이해하고 있으니 깊은 이해가 뒤따라 오지 않아

다시 정리해 본다.

코루틴(Co-Rutine)

  • Sub Rotine: 일반적인 함수를 이야기함
    • 진입점이 하나, 부모/자식의 종속적 관계 성립
    • 매 호출시 마다, Rotine내 context가 초기화됨
  • Co Routine: 코루틴
    • 진입점이 여럿이며, 병렬(Concurrensy, not Parallelism) 수행
    • 호출부와 대등한 관계
    • 여러번 호출이 되어도, Routine 내 Context가 유지

코루틴은 서로 대화하는 형식의 함수

제너레이터

  • 연속된 (Sequence) 값들을 생산해내는 함수
  • 함수에 yield 키워드가 쓰여지면, Generator
  • yield 한 값들이 순차적으로 생산된다.
  • Generator에서 return문을 만나더라도 종료만 될 뿐, 리턴값이 사용 되지는 않는다.

값을 리턴하는 대신, yield 구문을 이용하여 값을 생성. (보통은 이를 루프에 연결해서 많이 사용한다.)

제너레이터 함수는 제너레이터 객체를 리턴한다. 그리고 이 객체는 자동으로 실행되지 않는다.

.next()가 호출되면 그제서야 실행을 시작한다. 그리고 제너레이터가 리턴을 하게되면 순회가 끝난다.

순회가 끝난 제너레이터를 다시 실행하려고 하면 StopIteration 예외가 발생한다. (for 루프는 이 예외가 발생할 때까지 제너레이터를 돌리게 된다.)

비교

제너레이터 = 반복이 목적

코루틴 = 외부와의 상호작용


참고 1) http://bluese05.tistory.com/56

참고 2) https://nomade.kr - 파이썬 코루틴, 제너레이트 에피소드

참고 3) http://haerakai.tistory.com/36

참고 4) https://soooprmx.com/archives/5622