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 "<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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值