关于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这两个关键点,在两个任务间跳转执行,并且会捎带上一些信息。

原文地址:https://www.cnblogs.com/geekpy/p/5137988.html