1. 程式人生 > 其它 >python 協程一

python 協程一

技術標籤:併發程式設計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)啟用協程。

https://blog.csdn.net/s695811494/article/details/112097682