[Python] 코루틴 사용하기

    코루틴은 메인루틴과 서브루틴으로 나뉘어진다.

    메인루틴에서 서브루틴을 호출하면 서브루틴의 코드를 실행한 뒤 다시 메인 루틴으로 돌아온다.

    이게 현재까지 써온 코드 방식이다.

     

    그러나 코루틴은 서로 협력하는 루틴이라는 뜻이다.

    메인루틴과 서브루틴처럼 종속 된 관계가 아니라 대등한 관계이며 특정 시점에 상대방의 코드를 실행한다.

     

     

    코루틴은 함수가 종료되지 않은 상태에서 메인 루틴의 코드를 실행 한 뒤 다시 돌아와서 코루틴의 코드를 실행한다.

    코루틴이 종료되지 않았으므로 코루틴의 내용도 계속적으로 유지된다.

     

     

     

    코루틴에 값 보내기

    def number_coroutine():
        while True:
            x = (yield)
            print(x)
            print('coco')
    
    co = number_coroutine()
    next(co)
    
    co.send(10)
    co.send(22)
    co.send(33)

    코루틴은 제너레이터의 특별한 형태이다. 제너레이터는 yield로 값을 발생시키지만, 코루틴은 yield로 값을 받아 온다.

    코루틴에 값을 보내면서 코드를 실행할 때는 send 메서드를 사용한다.

    그리고 send 메서드가 보낸 값을 받아오려면 (yield)형식으로 yield를 괄호로 묶어준 뒤 변수에 저장한다.

     

     

    def sum_coroutine():
        total = 0
        while True:
            x = (yield total)
            total += x
    
    
    co = sum_coroutine()
    print(next(co))
    
    print(co.send(1))
    print(co.send(2))
    print(co.send(3))
    

    >>>0

    >>>1

    >>>3

    >>>6

     

    보통 함수를 호출하고 종료가 된다면 매개변수는 사라지는 것이 정상이다. 하지만 코루틴은 계속해서 결과를

    받고 출력해준다.

     

     

     

    코루틴 종료시키기

    def number():
        while True:
            x = (yield)
            print(x, end=' ')
    
    co = number()
    next (co)
    
    for i in range(20):
        co.send(i)
    
    co.close()
    

    무한 루프로 이루어진 코루틴을 종료 시키는 방법은 의외로 간단하다.

    close를 붙이면 된다.

     

    close를 붙이면 종료되니, 코루틴을 종료 시점을 알고 있다면 매우 편리하게 사용 할 수 있다.

    반응형

    댓글

    Designed by JB FACTORY