코루틴이란? cooperative routine을 의미하며 서로 협력하는 루틴이라는 뜻이다.
일반 함수를 실행시키면 코드를 한번 만 실행할 수 있지만 코루틴은 코드를 여러 번 실행시킬 수 있다.
(메인루틴의 코드를 실행시킨 뒤 다시 돌아와서 서브루틴(코루틴)의 코드를 실행시키낟.)
"동시성 프로그램"을 이용하기 위한 기술인데, main루틴이 대기 중일때 서브루틴에서 연산 이후 다시 메인루틴으로 돌아오게 한다.
뭔가 메인루틴과 서브루틴간에 종속적인 관계라고 생각할 수 있으나 대등한 관계이며 특정 시점마다 메인루틴-서브루틴의 코드를 실행시킨다.
def coroutine_test2(x):
print('코루틴 시작')
print('코루틴 값 받음:{}'.format(x))
y = yield x # y를 메인루틴에서 받아서 출력할 때, x를 서브루틴-> 메인으로 전달
# 왼쪽: 받는 것 오른쪽 : 주는 것
# => 동시성 개발이 가능함
print('코루틴 값 받음:{}'.format(y))
z = yield x + y
print('코루틴 값 받음:{}'.format(z))
t = yield
c2 = coroutine_test2(10)
print(next(c2))
# 코루틴 시작
# 코루틴 값 받음:10
# 10
# 여기까지 실행하고 나면, y값을 받을 대기상태가 됨
print(c2.send(100))
# 코루틴 값 받음:100
# 110
# 여기까지 실행하고 나면, z값을 받을 대기상태가 됨
print(next(c2))
# 코루틴 값 받음:None
# None
from inspect import GetGeneratorstate # 제너레이터 상태 값 확인
# 중간중간에 넣어주어야 한다.