python 协程一

协程,又称微线程,纤程,英文名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 "", line 1, in 
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

你可能感兴趣的:(并发编程,python,python,生成器,generator,并发)