코루틴(Coroutine) 정리

hodu·2022년 10월 9일
0

python

목록 보기
13/17
post-thumbnail

코루틴

코루틴이란? cooperative routine을 의미하며 서로 협력하는 루틴이라는 뜻이다.

일반 함수를 실행시키면 코드를 한번 만 실행할 수 있지만 코루틴은 코드를 여러 번 실행시킬 수 있다.
(메인루틴의 코드를 실행시킨 뒤 다시 돌아와서 서브루틴(코루틴)의 코드를 실행시키낟.)

"동시성 프로그램"을 이용하기 위한 기술인데, main루틴이 대기 중일때 서브루틴에서 연산 이후 다시 메인루틴으로 돌아오게 한다.

뭔가 메인루틴과 서브루틴간에 종속적인 관계라고 생각할 수 있으나 대등한 관계이며 특정 시점마다 메인루틴-서브루틴의 코드를 실행시킨다.

코루틴 키워드

  • GEN_CREATED : 처음 대기상태
  • GEN_RUNNING : 실행상태
  • GEN_SUSPENDED : yield 대기상태 → 이부분이 중요 send로 값을 보낼 수 있는 상태임
  • GEN_CLOSED : 실행 완료상태
  • 3.5 버전이후부터는 def → async, yield → awiat로 쓸 수 있게 됨
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 # 제너레이터 상태 값 확인
# 중간중간에 넣어주어야 한다.
  • 메인에서 서브로 넘기는 것 → y = yield x
  • 서브에서 메인으로 넘기는 것 → y = yield x
profile
안녕 세계!

0개의 댓글