作家
登录

Python增强的生成器:协程

作者: 来源: 2017-09-06 10:56:13 阅读 我要评论

  1. def consumer(func): 
  2.  
  3.     def wrapper(*args,**kw): 
  4.  
  5.         gen = func(*args, **kw) 
  6.  
  7.         gen.next() 
  8.  
  9.         return gen 
  10.  
  11.     wrapper.__name__ = func.__name__ 
  12.  
  13.     wrapper.__dict__ = func.__dict__ 
  14.  
  15.     wrapper.__doc__  = func.__doc__ 
  16.  
  17.     return wrapper  

Python加强的生成器:协程

本文重要介绍python中Enhanced generator即coroutine相干内容,包含根本语法、应用处景、留意事项,以及与其他说话协程实现的异同。

enhanced generator

回到Coroutine,可拜见维诽谤科解释,而我本身的懂得比较简单(或者单方面):法度榜样员可控制的并发流程,不管是过程照样线程,其切换都是操作体系在调剂,而对于协程,法度榜样员可以控制什么时刻切换出去,什么时刻切换回来。协程比过程 线程轻量级很多,较少了高低文切换的开销。别的,因为是法度榜样员控制调剂,必定程度上也能避寐一?义务被半途中断.。协程可以用在哪些场景呢,我认为可以归纳为非浊宣等待的场景,如游戏编程,异步IO,事宜驱动。

在上文《Python Yield Generator 详解》中介绍了yield和generator的应用处景和主意事项,只用到了generator的next办法,事实上generator还有更强大年夜的功能。PEP 342为generator增长了一系列办法来使得generator更像一个协程Coroutine。做重要的变更在于早期的yield只能返回值(作为数据的产生者), 而新增长的send办法能在generator恢复的时刻花费一个数值,而去caller(generator的调用着)也可以经由过程throw在generator挂起的主动抛出异常。

除了next和send办法,generator还供给了两个实用的办法,throw和close,这两个办法加强了caller对generator的┞菲握。send办法可以传递一个值给generator,throw办法在generator挂起的处所抛出异常,close办法让generator正常停止(之后就不克不及再调用next send了)。下面具体介绍一下throw办法。

  1. back_data = yield cur_ret 

这段代码的意思是:当履行到这条语句时,返回cur_ret给调用者;并且当generator经由过程next()或者send(some_data)办法恢复的时刻,将some_data赋值给back_data.例如:

  1. def gen(data): 
  2.  
  3.     print 'before yield', data 
  4.  
  5.     back_data = yield data 
  6.  
  7.     print 'after resume', back_data 
  8.  
  9.      
  10.  
  11. if __name__ == '__main__'
  12.  
  13.     g = gen(1) 
  14.  
  15.     print g.next() 
  16.  
  17.     try: 
  18.  
  19.         g.send(0) 
  20.  
  21.     except StopIteration: 
  22.  
  23.         pass  

输出:

  1. before yield 1 
  2.  
  3.  1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      最经典的前端面试题之一,你能答出什么幺蛾子?

    本文的目标是以“输入 URL 后产生了什么”这个经典面试题为引子,写一篇既可以或许涵盖面试中大年夜部分收集试题,又可以或许将“输入 URL 后产生什么”讲得有深度的>>>详细阅读


    本文标题:Python增强的生成器:协程

    地址:http://www.17bianji.com/lsqh/37169.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)