728x90
반응형
- 개요
코루틴과 관련된 예제를 진행하여 코루틴에 대해서 더 자세하게 알아본다
1) 코루틴의 상태
코루틴의 처리 상황에 따라서 코루틴의 상태를 확인할 수 있다
각각 다음과 같이 구성되어 있다
- GEN_CREATED : 최초 대기 상태
- GEN_RUNNING : 실행 상태
- GEN_SUSPENDED : yield 대기 상태
- GEN_CLOSED : 실행 완료 상태
코루틴의 상태는 inspect 모듈의 getgeneratorstate 함수를 호출하여 확인할 수 있다
def cor2(x):
print(f"Coroutine Started : {x}")
y = yield x
print(f"Coroutine Received : {y}")
z = yield x + y
print(f"Coroutine Received Again : {z}")
yield x + y + z
from inspect import getgeneratorstate
cr2 = cor2(10)
# 코루틴 상태 확인 (1)
print(getgeneratorstate(cr2))
print(next(cr2))
# 코루틴 상태 확인 (2)
print(getgeneratorstate(cr2))
print(cr2.send(100))
# 코루틴 상태 확인 (3)
print(getgeneratorstate(cr2))
print(cr2.send(1000))
위와 같이 예제를 구성하여 코루틴의 상태를 확인할 수 있다
총 3번의 yield를 사용하여 x / x + y / x + y + z의 값을 반환한다
또 코루틴을 호출하는 시점에서 getgeneratorstate 함수를 호출하여 해당 코루틴의 상태도 확인한다

실행 결과는 위와 같다
최초 대기 상태에서는 GEN_CREATED가 출력되고,
yield를 대기하는 상태에서는 GEN_SUSPENDED가 출력된다
2) 중첩 yield
def cor3():
for x in "AB":
yield x
for y in range(1, 4):
yield y
cr3 = cor3()
print(next(cr3))
print(next(cr3))
print(next(cr3))
print(next(cr3))
print(next(cr3))
cr4 = cor3()
print(list(cr4))
print()
print()
def cor4():
yield from 'AB'
yield from range(1, 4)
cr5 = cor4()
print(next(cr5))
print(next(cr5))
print(next(cr5))
print(next(cr5))
print(next(cr5))
yield를 사용하여 코루틴 외부로 값을 한번씩만 전달할 수 있다
그러나 파이썬 3.3에서 도입된 yield from 구문을 사용하면
하위 제너레이터나 반복 가능한 객체의 모든 값을 한번에 전달할 수 있다

실행 결과는 위와 같다
반복하여 yield 구문을 실행한 결과와 yield from 구문을 실행한 결과는 동일하다
728x90
반응형
'Python > 파이썬 심화' 카테고리의 다른 글
| Futures 모듈 (1) (0) | 2025.10.19 |
|---|---|
| Futures 모듈이란? (0) | 2025.10.19 |
| 코루틴 (1) (0) | 2025.10.12 |
| 제너레이터 + itertools 모듈 (0) | 2025.09.28 |
| 병행성 - 기본 (2) (0) | 2025.09.14 |