Python/Python

제너레이터, 이터레이터, 코루틴

scarlet0star 2023. 4. 19. 20:54

선 요약

1. 이터레이터는 next()를 통해 다음 값을 반환하는 객체이다.
2. yield 는 값의 변환과 함께 함수의 일시정지를 해주는 키워드이다.
3. 제너레이터는 이터레이터를 생성하는 함수이다. yield 키워드를 이용한다.
4. 코루틴은 일시정지와 재개가 가능한 서브루틴이며 이때 yield 키워드를 사용한다.

이터레이터는 값을 순차적으로 꺼낼 수 있는 객체이다. 보통 iterable한 객체로 부터 생성할 수 있는데, 필요시마다 next()를 호출하여 값을 받아올 수 있는 편리한 객체이다.

 

제너레이터는 yield 키워드를 이용하여 이터레이터를 생성하는 함수이다. 자세히 알아보기 전에 yield 키워드를 알아보자면, return 함수와 같이 반환을 하면서 동시에 메모리를 저장하여 중단점을 만들어주는 키워드이다. 이러한 yield 키워드를 사용하는 것이 제너레이터와 코루틴의 연결고리로 볼 수 있다

 

다시 제너레이터로 돌아가서, 앞선 요약과 동일하게 yield를 이용하여 next가 호출될 때마다 yield에 지정된 값이 __next__의 값으로 반환되어지며 generator에 return 값을 지정해주면 stopIteration 예외와 함께 반환된다.

 

우리가 사용할 asyncio의 비동기 코루틴 역시 yield와 유사한 원리를 활용하여 구현되었다. yield가 메모리값을 저장하고 진행하던 함수를 일시정지하는 특성을 살려 여러개의 루틴이 번갈아가면서 진행되면서 실행할 수 있도록 하는 것이다. 거기에 send() 를 통해서 yield의 값을 전달해줄 수 있게 되어 각 루틴간의 양방향 전달이 가능해져 python을 통해 하나의 쓰레드로 여러 작업을 동시에 처리 할 수 있게 되었다.

https://bentist.tistory.com/88

 

Iterator, Generator, Coroutine(코루틴)의 이해

파이썬에서 비동기 방식을 구현하기 위해서는 코루틴을 먼저 이해해야 한다. 그러나 코루틴의 저변에는 Iterator개념이 깔려 있기 때문에 Iterator와 Generator 객체를 함께 알아보고자 한다. 루틴(routi

bentist.tistory.com

https://bentist.tistory.com/89

 

비동기 라이브러리 Asyncio 이해

concurrent.futures(다중 스레드, 비동기/Non-block 방식) Asyncio를 이해하기 전에, thread, process에서의 concurrent 프로그래밍 방식으로 python 3.2에 추가된 future(PEP 3148 – futures - execute computations asynchronously)를

bentist.tistory.com

https://medium.com/humanscape-tech/%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%A0%9C%EB%84%88%EB%A0%88%EC%9D%B4%ED%84%B0%EC%99%80-%EC%BD%94%EB%A3%A8%ED%8B%B4-185ae5089bc2

 

파이썬 제너레이터와 코루틴

안녕하세요. 휴먼스케이프의 개발자 Bruno입니다.

medium.com