2011년 7월 30일 토요일

파이썬 코루틴 (python coroutine) -1

파이썬과 코루틴

이 개념을 이해하는데 상당히 힘들었습니다. 익숙하지 않은 내용들이 많고,
또 이 개념을 설명해 주는 자료가 그리 많지 않네요

파이썬 2.5부터 지원하는 내용인것 같습니다.

일단 가장 잘 설명해 놓은 자료는 이것 입니다. .

다베아즈 아즈씨의 설명, http://www.dabeaz.com/coroutines/index.html

일단 코루틴은 Lua에서 주로 많이 사용하는 개념으로 보입니다.

여기서 나오는 개념들은 yield, generator, iterator들인데,

이게 다른 언어에서 좀 생소한 개념들이라 좀 헷갈렸습니다.

일단 generator는 producer라고 합니다.
데이터를 생산해 내는 역할을 하죠

이에 반하여 coroutine은 consumer입니다.
데이터를 받아 먹는 역할을 합니다.

여기서 중요한 역할을 하는 구문이 yield입니다.

yield가 2.5 이전 버젼에서는 오직 generator의 구문으로만 쓰였습니다.

이전의 예를 들었던 아래의 구문에서는
def iter_func:
  i =1
  while True:
    yield i 
    i += 1

m  = iter_func()
print m.next()
print m.next()

>> ---------------------
1 
2


yield는 generator구문을 잠시 세우는 역할을 합니다.

위의 구문에서는 일단 generator가 선언된 다음에

next() 를 호출하면, yield가 써진 구문에서 멈추죠.

그리고 다음 next()을 호출하면 다음 yield가 보일때까지 돌다가 멈춥니다.

코루틴도 마찬가지인데
좀 다른것은 제네레이터에서 yield는 마치 return을 대신해서 사용하는 것 처럼 보입니다

코루틴은 이 yield를 입력으로 사용합니다.

자세한 내용은 coroutine -2 에서 이어가도록 하겠습니다.

댓글 없음:

댓글 쓰기