Python/파이썬 심화

코루틴 (1)

monstro 2025. 10. 12. 17:33
728x90
반응형

- 개요

파이썬에서 코루틴멀티 스레드는 여러 작업을 동시에 처리하는 동시성을 수행할 수 있는 기능이다

하지만 두 기능을 사용하는 방식에서 차이점이 존재한다

  • 코루틴 : 단일 스레드에서 스택을 기반으로 동작하는 비동기 작업
    • yield 키워드 : 코루틴에서 사용하는 키워드로, 메인 루틴서브 루틴왕복할 수 있는 키워드
  • 멀티 스레드 : CPU 코어에서 스레드를 쪼개어 비동기 작업실시간으로 시분할하여 수행
    • 분할된 스레드는 OS에서 관리

 

- 코루틴의 예제

def cor1():
    print("Coroutine Started")
    i = yield
    print(F"Coroutine Received : {i}")

# Generator 선언
cr1 = cor1()
print(cr1, type(cr1))

 

위와 같이 코루틴과 관련된 간단한 예제를 구성하였다

yield 키워드를 사용하여 Started 시점Received 시점을 분리하여 실행한다

cr1이라는 Generator 인스턴스를 생성하여 사용한다

 

Generator 인스턴스 확인 결과

 

Generator 인스턴스를 확인하여 위와 같은 결과를 얻을 수 있다

 

- 코루틴의 활용

...

next(cr1)

print("")
print("===============================================")
print("")

cr1.send(100)

 

위와 같이 코드를 구성하였다

next 함수 send 함수를 사용하여 코루틴을 사용한다

  • next 함수 : 서브 루틴에서 메인 루틴으로 데이터를 전달하는 함수
    • 오직 서브 루틴에서 메인 루틴으로만 동작함
    • yield 키워드가 호출되는 지점까지의 로직을 수행함
  • send 함수 : 메인 루틴에서 서브 루틴으로 데이터를 전달하는 함수
    • 인자를 설정하지 않으면 None 오브젝트를 전달함
    • 호출하기 이전에 반드시 next 함수를 호출하여 서브루틴의 contextyield까지 맞추어야 함

 

실행 결과

 

실행한 결과는 위와 같다

첫번째 next 함수를 호출한 시점에서는 yield 이전까지의 서브 루틴의 실행 결과가 반환되고

두번째 next 함수를 호출한 시점에서는 yield 이후의 서브 루틴의 실행 결과가 반환되었다

728x90
반응형

'Python > 파이썬 심화' 카테고리의 다른 글

Futures 모듈이란?  (0) 2025.10.19
코루틴 (2)  (0) 2025.10.12
제너레이터 + itertools 모듈  (0) 2025.09.28
병행성 - 기본 (2)  (0) 2025.09.14
병행성 - 기본 (1)  (0) 2025.09.14