python 協程一
阿新 • • 發佈:2021-01-03
技術標籤:併發程式設計pythonpython生成器generator併發
協程,又稱微執行緒,纖程,英文名Coroutine。
協程使用生成器定義:定義體中含有yield關鍵字
>>> from inspect import getgeneratorstate # ① >>> def coroutine(): ... print("step one") ... x = yield ... print("step two x value :", x) ... >>> cor = coroutine() # ② >>> getgeneratorstate(cor) 'GEN_CREATED' >>> cor.send(None) # next(cor)效果一樣 # ③ step one >>> getgeneratorstate(cor) 'GEN_SUSPENDED' >>> cor.send(123) # ④ step two x value : 123 Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> getgeneratorstate(cor) 'GEN_CLOSED'
①協程有四種狀態,可以使用inspect.getgenerator獲得協程當前的狀態。
定義協程函式coroutine。
②建立協程例項,獲得當前狀態'GEN_CREATED'。
③使用.send(None)啟用協程,暫停的yield處,此時協程狀態'GEN_SUSPENDED'。
④使用.send(123)傳遞x值,繼續執行後面的語句,此時協程狀態'GEN_CLOSED'。
執行的協程定義體的末尾,導致生成器嚮往常一樣,丟擲StopIteration異常。
- 協程有4中狀態,上述事例顯示了3中,還有一種:
'GEN_RUNNING' ,直譯器正在執行(只有在多執行緒應用中才能看到這個狀態。此外,生成器物件在自己身上呼叫 getgeneratorstate 函式也行,不過這樣做沒什麼用) - 協程只有處於'GEN_SUSPENDED'狀態時才能使用.send(val)
- 協程處於'GEN_CREATED'狀態時,必須使用next(cor)或者cor.send(None)啟用協程。