協程:為非搶占式多工產生子程式的計算機元件,協程允許不同入口點在不同位置暫停或開始執行程式
從技術角度上講,是乙個可以暫停執行的函式,生成器
實現: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呼叫
Python學習筆記 協程
二十 協程 協程,又稱微執行緒,纖程,coroutine 子程式 又稱為函式 在所有語言中都是層級呼叫 a呼叫b b呼叫c c返回b b 返回 a 所以子程式呼叫是通過棧實現的 乙個執行緒就是執行乙個子程式 子程式呼叫總是乙個入口 一次返回 呼叫順序是明確的 而協程的呼叫和子程式不同 協程看上去也是...
python學習筆記 協程
協程 協程是一種允許在特定位置暫停或恢復的子程式 這一點和生成器相似。但和生成器不同的是,寫成可以控制子程式暫停之後 的走向,而生成器僅能被動的將控制權交還給呼叫者。練習1 假設有兩個子程式main和printer。printer是乙個死迴圈,等待輸入 加工並輸出結果。main作為主程式,不時地向p...
Python 學習筆記 協程
python裡面控制併發,除了多執行緒和多程序,還可以使用協程 coroutine 他是在乙個執行緒內通過程式設計師人為的指定來進行切換 例1 通過switch 可以人為來回切換到另外乙個函式 當所有函式執行完畢,最後輸出print 10 usr bin env python coding utf ...