1. 程式人生 > >Python學習筆記:協程

Python學習筆記:協程

協程:為非搶佔式多工產生子程式的計算機元件,協程允許不同入口點在不同位置暫停或開始執行程式
從技術角度上講,是一個可以暫停執行的函式,生成器
實現:
1.yield返回
2.send呼叫

協程的四個狀態:
- inspect.getgeneratorstate(···)函式確定,該函式會返回下述字串的一個
- GEN_CREATED: 等待開始執行
- GEN_RUNNING: 直譯器正在執行
- GEN_SUSPENED: 在yield表示式處暫停
- GEN_CLOSED: 執行結束
- next預激(prime)

協程中止:
- 協程中未處理的異常會向上冒泡,傳給next 函式或send方法的呼叫方(即觸發協程的物件)
- 停止協程:傳送某個哨符值,讓協程退出。內建的None和Ellipsis常量經常用作哨符值

yield from
- 呼叫協程為了得到返回值,協程必須正常中止
- 生成器正常中止會發出StopIteration異常,異常物件的value屬性儲存返回值
- yield from 從內部捕捉StopIteration異常

委派生成器:
- 包含yield from表示式生成器的函式
- 委派生成器在yield from表示式處暫停,呼叫方可以直接把資料發給子生成器
- 子生成器在把產出的值發給呼叫方
- 子生成器在最後,直譯器會丟擲StopIteration,並且把返回值附加到異常物件上

 

生成器generator:一邊迴圈一邊計算下一個元素的機制/演算法
滿足三個條件:
1.每次呼叫都生產出for迴圈需要的下一個元素
2.如果到達最後一個,輸出StopIteration異常
3.可被next呼叫