파이썬 파트 IV 노트 _ _ _ 높은 순서 프로그래밍 프로세스, 스레드, 코 루틴 _4. 코 루틴

1. 코 루틴 개념 :

  루틴이나 서브 루틴, 이러한 모든 언어로 모든 통화 계층 구조, 실행 B, A 마침내 완성 수익을 반환, B, B 다음 프로세스 실행 호출하고 C, C 완성 된 수익을 호출 할 수 있습니다. 스택을 통해 달성되어, 스레드가 수행하는 자칭 항목, 호출이 분명하다 주문에 따라 수익을 호출하는 주장.

  코드 :

데프 C () : 
    인쇄 ( " C - 시작 " ) 
    인쇄 ( " C - 끝 " ) 

데프 B () : 
    인쇄 ( " B - 시작 " ) 
    C () 
    인쇄 ( " B - 끝 " ) 

데프 A () : 
    인쇄 ( " A - 시작 " ) 
    B () 
    인쇄 ( " A - 끝 " ) 

A () 

# A를 - 시작 
#의 B를 - 시작 
#의 C를 - 시작 
#의 C를 - 
#의 B를- 
# A를 --end

   코 루틴 : 그것은 일상적인,하지만 구현 과정에서 서브 루틴 내에서 중단 될 수있는 것 같습니다. 그런 다음 함수 호출없이 다른 인터럽트 서브 루틴의 구현을 켭니다.

  코 루틴 스레드에 비해 코 루틴 실행 효율은 하나 개의 스레드 만 있기 때문에, 단지 그것의 상태를 결정해야 잠금 해제에 조정 과정을 자원하는 주요 변수의 더 쓰기 충돌이없는 매우 높다. 예를 들어, 방법으로 다음 코드를 다루는?

DEF A () 
    인쇄 ( 1. ) 
    인쇄 ( 2 ) 
    인쇄 ( 3. ) 

DEF의 B () : 
    인쇄 ( " X " ) 
    인쇄 ( " Y " ) 
    인쇄 ( " Z " ) 

없이 # 실행 결과 B 통화 
중 # . (1)    (2)    XYZ     . 3 
# 1 그런데 특성 코 루틴 실행 스레드, 스레드 같은 비트의 실행 중에, B 보일

 

 

2. 간단한 코 루틴을 설정합니다 :

  코 루틴은 발전기에 의해 달성된다.

  코드 첫 :

RUN DEF () 
    (인쇄 . 1 )
     , 수율  10 
    인쇄 ( 2 )
     수율  (20)는 
    (인쇄 . 3 )
     , 수율  30 

#은 심플 코 루틴, 구현 단계의 제어 기능, 저장 스레드 또는 프로세스 전환. 
# 반환 값은 발전기입니다. 
m = RUN () 
전단 (NEXT (m))

  설명 : 사실, 우리가 여기 발전기의 개념을 사용합니다. 발전기를 실행하는 것을 계속하도록 트리거 발생기.

  설명 : 수율 = 복귀 모두 그대로 동일한 의미하지만, 수율이 직접 반환하지만, 사용자 조작을 기다리는 되돌아가 결합 위치로 복귀시키지된다.

  

 3. 데이터 전송 :

  코드 :

DEF RUN () : 
    # 널 변수 저장 역할 데이터 보유하지 빈 
    데이터 = "" 

    R & LT = 수율 데이터 
    #의 R & LT = 
    인쇄 ( . 1 , R & LT, 데이터)를 
    R & LT = 항복 데이터 
    #의 R & LT = B의 
    인쇄 ( 2 , R & LT, 데이터) 
    R & LT = 항복 데이터 
    #의 R & LT = C의 
    전단 ( . 3 , R & LT, 데이터) 
    R & LT = 항복 데이터 
m = RUN ()가 발전기 제조 # 같다 
# 개시 m의 
인쇄 (m.send (없음))





인쇄 (m.send ( " " )) 
프린트 (m.send ( " B " )) 
프린트 (m.send ( " C " )) 
이 널 값으로 인쇄 된 것을 # 주 
# . 1 
#의 
# 2 B의 
#의 
# 3 C

 

   설명 1 : .send () 메시지 발생기로 보내진다.

  주 2 : 실행 :( 우리가 반환 이해하고 원하는대로 볼 산출한다주의 다음과 같이)

      단계 : 없음받은 후, 함수는 null 값을 보내는 null 값을주지, 수율이 R, 빈 인쇄에 NULL 데이터를 반환합니다.

      파트 II : 우리는 전송 데이터의 ""를 제공하고 "는"R의 값, 인쇄 1, "A"로 산출하기 위해 데이터를 반환

      뒤에 유사.

   

  예를 들어 우리는 발전기에 전달 된 매개 변수의 함수의 형태를 사용합니다.

제조자 DEF (C) 
    c.send (없음) 
    을위한 I  범위 ( 5. ) 
        인쇄 ( " 제조자 데이터 D %의 생성 " %의 I) 
        R & LT = c.send (STR (I)) 
        인쇄 ( " 소비를 데이터 S % " %의 R & LT) 
    c.close () 


DEF 고객 () : 
    데이터 = " " 
    그동안 참 : 
        N- = 항복 데이터
         IF 하지 N- :
             리턴 
        인쇄 ( " S의 %의 소비 지출 " %의 N-) 
        데이터 = " 200 " 



C = 고객 () 
프로듀서 (C)는 
0 # 제조자 데이터 생성 
# 0 소비자 지출 
#의 소비 데이터 (200) 
# 1 데이터 제조자 생성 
#에서 소비 한 
소비 미국인에게 데이터 (200) 
(2 #)의 생산 데이터를 생성 
# 2 소비자 지출 
# 200 소비자 지출 데이터 
3 제조자 데이터 생성 # 
# 3 소비자 지출 
# 200 소비 데이터 
# 4의 생산 데이터를 생성 
# 소비자 지출 4 
# (200) 소비자 지출 데이터

 

추천

출처www.cnblogs.com/noah0532/p/10939313.html