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)    收藏  举报

导航