zoukankan      html  css  js  c++  java
  • 【Python】协程实现生产者消费者模型

      协程的实现为协作式而非抢占式的,这是和进程线程的最大区别。在Python中,利用yield和send可以很容易实现协程。

      首先复习下生成器。

      如果一个函数使用了yield语句,那么它就是一个生成器函数。当调用这个函数时,它返回一个迭代器。当第一次调用__next__()时候,生成器函数主体开始执行,遇到yield表达式时候终止。

      当使用__next__()方法时候,yield value语句返回None;当使用send(v)方法时候,yield value返回v。也就是说,__next__()方法相当于send(None)方法

     1 def consumer()
     2     while True:
     3         line = yield                            #line接收的是yield这个表达式的返回值!
     4         print(line.upper())
     5 
     6 
     7 def productor():
     8     with open('text.txt') as file:
     9         for i, line in enumerate(file):
    10             yield line
    11             print("{0} lines".format(i))
    12 
    13 
    14 c = consumer()
    15 c.__next__()                                   #手动启动生成器,注意在Python3.X中不是c.next()
    16 for i in productor():
    17     c.send(i)

    参考资料:《改善Python程序的91个建议》建议66、67

  • 相关阅读:
    Power Strings P5019
    Floyd模板题 P1704
    【训练题】强连通分量缩点 P1679
    字符串hash模板题 P5018
    Dijkstra模板题 P1710
    【训练题】分队 P1672
    二分图模板题 P1631
    【训练题】无序字母对 P1675
    KMP模板题 P1537
    马路 树链剖分/线段树/最近公共祖先(LCA)
  • 原文地址:https://www.cnblogs.com/fcyworld/p/6275563.html
Copyright © 2011-2022 走看看