본문 바로가기

Language/Python

Book 파이썬답게 코딩하기 - Coroutine

Coroutine

파이썬답게 코딩하기

협력형 멀티태스킹을 위해 사용한다.
코루틴은 특정 위치에서 실행과 정지를 반복할 수 있도록 여러 진입점과 진출점을 가지고 있는 함수다.
일반적인 함수는 한번 실행, 한번 종료되지만, 코루틴은 여러 번 실행, 여러 번 종료될 수 있다.
여러 번 종료는 반환을 여러 번 할 수 있다.
코루킨은 yield를 사용해서 반화하거나 값을 입력받는 함수다.

Function, Generator, Coroutine

코루틴은 yield로 여러 번 반환되고, 여러 번 호출될 수 있으다. 중요한 점은 호출 간에 상태가 유지된다.
제너레이터는 yield를 반환할 목적으로 사용하고, 코루틴은 반환과 입력을 목적으로 사용한다.
제너레이터는 이터레이터 역할을 하고, 코루틴은 함수의 역할을 한다.

coroutine

Coroutine 예시

# basic_coroutine.py
Hello, your input message is 'None'
Hello, your input message is 'Test'
Hello, your input message is 'Coroutine'
# cowork_coroutine.py
[w1] Total : 46, work : 4
[w2] Total : 44, work : 2
[w1] Total : 42, work : 2
[w2] Total : 40, work : 2
[w1] Total : 35, work : 5
[w2] Total : 29, work : 6
[w1] Total : 24, work : 5
[w2] Total : 22, work : 2
[w1] Total : 20, work : 2
[w2] Total : 16, work : 4
[w1] Total : 7, work : 9
[w2] Total : 3, work : 4
[w1] Total : 0, work : 3
[w2] Total : 0, work : 0
# return_coroutine.py
== Get coroutine ==
<generator object get_coroutine at 0x103942450>
== Get coroutine's return value ==
<generator object return_one_to_ten at 0x103942550>
== Get values ==
0
[1, 2, 3, 4, 5, 6, 7, 8, 9]
# yield_from.py
== Get coroutine ==
<generator object get_coroutine at 0x10117c150>
== Get values ==
0
[1, 2, 3, 4, 5, 6, 7, 8, 9]