zoukankan      html  css  js  c++  java
  • 关于yield创建协程的理解

    先上利于理解的代码:

     1 #coding:utf-8
     2 def consumer():
     3     c_r = ''
     4     while 1:
     5         m = yield c_r
     6         if not m:
     7             return
     8         print("consumer {}".format(m))
     9         c_r = '200 ok'
    10 def produce(c):
    11     n = 0
    12     next(c)
    13     while n<5:
    14         n+=1
    15         print("produce {}".format(n))
    16         p_r = c.send(n)
    17         print("consumer return {}".format(p_r))
    18     c.close()
    19 c = consumer()
    20 produce(c)

    1. next(c)启动生成器(顺便一提next(c)等价于c.send(None))。

    2. 在produce里遇到c.send(None)时,就去执行consumer的代码,在consumer里遇到yield时,就会跳到produce去执行,并且带上c_r的值,会赋予p_r。

    3. 在循环中,下一次遇到c.send(n)时,又跳去执行consumer的代码,此时会将n的值带上,赋予m。

    4. 其实质就是通过c.send()和yield这两个关键点,在两个任务间跳转执行,并且会捎带上一些信息。

  • 相关阅读:
    [Scoi2010]游戏
    HDU3415(单调队列)
    POJ1221(整数划分)
    POJ1050(dp)
    POJ2479(dp)
    HDU1864(背包)
    HDU1175(dfs)
    STL_string.vector中find到的iterator的序号
    Qt532.数值转为16进制(并填充)
    异常处理.VC++
  • 原文地址:https://www.cnblogs.com/geekpy/p/5137988.html
Copyright © 2011-2022 走看看