day1-4 生成器并行运算
一、生成器并行运算
通过yield实现在单线程的情况下实现并发运算的效果
介绍.send()方法的作用:
应用场景: 不停的做包子吃包子。
#定义一下消费者(consumer)。吃包子。
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
c=consumer("张三")
c.__next__()
c.__next__()
执行代码的结果:
会出现了None。因为没有包子,所以要通过.send()传一个包子给消费者张三。
代码如下:
import time
#定义一下消费者(consumer)。吃包子。
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
c=consumer("张三")
c.__next__()
#简单的做一个包子
b1="韭菜馅"
c.send(b1) #.send() 就是将调用yield,然后传值给yield
yield作用:保存当前暂停状态,然后返回。调用.__next__()又回到yield。
调用.__next__()不会给yield传值。
但是.send()可以给yield传值
.__next__()和.send()的区别:
.__next__()只调用yield,不会给yield传值。
.send() 不仅调用yield,而且会给yield传值。
上面只是简单的做一个包子,下面规范一下代码,不停的做包子》
import time
#定义一下消费者(consumer)。吃包子。
def consumer(name):
print("%s 准备吃包子啦!" %name)
while True:
baozi = yield
print("包子[%s]来了,被[%s]吃了!" %(baozi,name))
#定义一个消费者(producer),规范化生产包子
def producer(name):
c = consumer("A")
c2 = consumer("B")
c.__next__()
c2.__next__()
print("老子开始准备做包子啦!")
for i in range(10):
time.sleep(1)
print("做了1个包子!一人一半")
c.send(i)
c2.send(i)
producer("张三")
执行结果如下: 不停的做包子,吃包子。

通过yield实现在单线程的情况下实现并发运算的效果
posted on 2017-07-18 23:28 aptech2017 阅读(80) 评论(0) 收藏 举报
浙公网安备 33010602011771号