코 루틴은 기본적으로 특정 지점에서 실행을 일시 중지/일시 중지 할 수있는 함수이며 나중에 원할 때마다 같은 지점에서 실행을 재개 할 수 있습니다.

우리는 메커니즘을 필요—또는 더 정확하게,키워드-하는 우리는 체크 포인트를 삽입하고 우리가 여기에 함수의 실행을 일시 중지하고 호출 지점으로 제어를 반환 할 프로그램을 말할 수 있습니다. 우리는 원할 때마다 실행을 재개 할 것입니다.

파이썬에서는yield키워드를 사용하여 함수 실행을 일시 중지 할 수 있습니다.

여기서 흥미로운 점이 있습니다:

  • 코루틴은 실행이 일시 중지되고 제어가 호출된 지점으로 반환되는 하나 이상의 검사점이 있는 함수로 생각할 수 있습니다.
  • 본질적으로 코루틴은 여러 부분으로 나누어 진 함수이며,next함수를 사용하여 루프의 각 반복을 실행할 때 코루틴의 각 부분을 실행할 수 있습니다.

기본 예는 다음과 같습니다:

OUTPUT :<class 'generator'>
Function Starts
Function Ends

출력에서,우리는 몇 가지를 알 수 있습니다:

  • 먼저 생성기 객체를 제공하는 코 루틴/함수를 호출해야합니다.
  • 이 생성기 개체는 반복기와 유사하게 작동하지만 반복기의 경우 반복 가능 개체를 탐색합니다. 발전기로,우리는 코 루틴의 일부를 실행하고 있습니다.
  • StopIteration예외가 루프의 장면 뒤에 던져지고 잡히는 것처럼,이 경우에도 코 루틴의 마지막 부분이 실행될 때도 마찬가지입니다.

이제 그 사이에 함수를 일시 중지하는 것은 매우 흥미롭고 몇 가지 가능성을 열어줍니다:

  • 함수가 일시 중지되면 아무것도 하지 않습니다.
  • 함수에서 변수가 여러 번 수정되고 있으며 특정 검사점에서 특정 변수의 값을 원한다고 가정합니다. 그런 다음 특정 체크 포인트에서 해당 함수를 일시 중지하면 해당 변수의 값을 반환합니다.

예제를 보자.:

OUTPUT :Function Part 1
5
Function part 2
12
Function part 3

여기서x값은 함수 실행이 일시 중지되었으므로 다른 검사점에서yield에 의해 반환됩니다.

함수의 마지막 부분을 실행하고 함수에 수율이 남아 있지 않을 때마다 마지막 부분을 실행 한 후StopIteration예외가 발생합니다.

반복자가 다음 함수를 실행하려고 시도하지만 반복 가능 함수에 더 이상 요소가 남아 있지 않을 때와 마찬가지로StopIteration예외도 발생합니다.

  • 특정 검사점(즉,함수의 특정 상태)에서 값(상수 또는 변수 일 수 있음)을 보내려고한다고 가정합니다. 우리는 또한yield키워드를 사용하여 그렇게 할 수 있습니다. 값을 보내려면next대신send함수를 사용합니다.

예제를 보자.:

OUTPUT :Function part 1
6
Function part 2
12
Function part 3

send를 사용하기 전에next를 사용한 이유는yield검사점에 있고yield이 식의 오른쪽에 있을 때만send를 사용할 수 있기 때문입니다. 따라서 첫 번째yield에 도달하려면next함수를 사용해야합니다.

이제 여기에 코 루틴의 흥미로운 응용 프로그램이 있습니다. 우리는 우리가 멀티 스레딩에서처럼 앞뒤로 두 기능 사이를 전환 할 가정하자. 멀티스레딩에서는 운영체제에 의해interrupt이 발생할 때까지 계속 실행됩니다. 이 경우 원할 때마다 전환 할 수 있습니다.

예제를 보자.:

OUTPUT :Function 1 part 1
Function 2 part 1
Function 1 part 2
Function 1 part 3
Function 2 part 2
Function 2 part 3
Function 2 part 4
Function 1 part 4
Function 1 part 5

이 예에서 우리는 원할 때마다 코 루틴 사이를 앞뒤로 전환 할 수 있음을 알 수 있습니다.

따라서 여러 코 루틴 간의 전환을 처리하는 자체 사용자 지정 스케줄러를 작성하면 단일 스레딩으로 멀티 스레딩으로 수행 할 수 있습니다.

코 루틴에는 동시성과 같은 많은 응용 프로그램이 있으며 네트워크 프로그래밍에서 생산자-소비자 또는 발신자-수신자와 같은 다른 프로그래밍 패턴도 구현 될 수 있습니다. 나는 다가오는 기사에서 그것들을 탐구 할 것이다.

코루틴은 또한 다음과 같은 많은 프레임 워크의 빌딩 블록입니다. 또한 파이프 라인을 만들고 문제를 해결하기 위해 함께 연결할 수 있습니다.