Python

[Python] Coroutine 개념

비번변경 2024. 7. 22. 13:31

개요

2024.06.26-[Python] asyncio - 비동기 프로그래밍에서 코루틴이라는 개념이 나왔는데, 관련하여 개념적인 부분만 조금 적어둔다.

 

 

메인루틴과 서브루틴

Python에서는 함수를 호출하면 기본적으로 함수가 끝나고 현재 코드로 다시 돌아온다. 예로 들어 아래와 같은 코드가 있다고 하자.

def add(a, b):
    c = a + b  # add 함수가 끝나면 변수와 계산식은 사라짐
    print(c)
    print('add 함수')


def calc():
    add(1, 2)  # add 함수가 끝나면 다시 calc 함수로 돌아옴
    print('calc 함수')


calc()

 calc 함수에서 add 함수를 호출하면, add 함수의 실행이 완료되고 다시 calc 함수로 돌아온다. 무엇보다 add 함수에 들어있던 함수와 계산식은 사라진다.

이 때 calc가 메인 루틴(main routine)이라면, add는 서브 루틴(sub routine)에 해당되는데, 메인 루틴과 서브 루틴의 관계, 동작은 아래 그림처럼 나타낼 수 있다.

메인 루틴에서 서브 루틴을 호출하면 서브 루틴을 실행한 뒤 메인 루틴으로 돌아오며, 서브 루틴의 내용은 모두 사라진다. 즉, 서브 루틴은 메인 루틴에 종속되어 있다.

 

 

코루틴

코루틴은 cooperative routine를 의미하는데, 서로 협력하는 루틴이라는 뜻이다. 메인 루틴과 서브 루틴처럼 종속된 관계가 아니라 서로 대등한 관계로, 특정 시점에 상대방의 코드를 실행한다. 

즉, 함수가 종료되지 않은 상태에서 메인 루틴의 코드를 실행한 뒤 다시 돌아와 코루틴의 코드를 실행한다. 코루틴이 종료되지 않았기 때문에 코루틴의 내용도 계속 유지될 수 있다.

 

 

참고 문서

https://dojang.io/mod/page/view.php?id=2418

python 비동기를 뿌셔보자 🐍