码迷,mamicode.com
首页 > 其他好文 > 详细

关于yield创建协程的理解

时间:2016-01-17 23:12:12      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

先上利于理解的代码:

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

关于yield创建协程的理解

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!