zoukankan      html  css  js  c++  java
  • Python_1生成器(下)之单线并行--生产着消费者模型

     1 import time
     2 def consumer(name):
     3     print('%s准备吃包子了!' %name)
     4     while True:
     5         baozi = yield
     6         print('[%s]包子来了,被[%s]吃了' %(baozi,name))
     7 
     8 def producer(name):
     9     c = consumer('胖虎')
    10     c2 = consumer('狗子')
    11     c.__next__()
    12     c2.__next__()
    13     print('我要做包子啦!狗子,胖虎')
    14     for i in a:
    15         time.sleep(1)
    16         print('%s做了2个包子'%name)
    17         c.send(i)
    18         c2.send(i)
    19 a = ['韭菜馅','猪肉馅', '鸡蛋馅','茴香馅']
    20 producer('Lee')

    1、生成器中,next 和 send 有什么区别呢?

    next只是单纯的调用yeild,程序跳转到yeild,但是不会给yeild传值。
    send也是调用yeild,但是同时给yeild传值

    2、那么看程序第11、12行,问题来了,此处为什么必须要执行next?

    过程分析:

    消费者 '胖虎' 执行完之后执行一个next,如果不执行这个next,那么
    consumer(name)中什么动作都没有执行,只有使用next这个指令,才可以使程序执行到 baozi = yield 这个语句,
    这样才可以执行第三行语句,也就是打印第3行中print中的内容

    原理分析:

    c = consumer('胖虎') 这条语句只是将函数consumer(name)这个函数变成了一个生成器,而并不执行consumer(name)的内容,
    因为此时consumer(name)不是函数,而是一个生成器
    所以要想执行consumer(name)中的内容,只有使用next,才可以让程序在consumer(name)中往下走

  • 相关阅读:
    HDU 2196 Computer (树形DP)
    HDU 4756 Install Air Conditioning (MST+树形DP)
    HDU 4126 Genghis Khan the Conqueror (树形DP+MST)
    HDU 4714 Tree2cycle (树形DP)
    HDU 1159 Common Subsequence (LCS)
    HDU 2159 FATE (二维背包)
    HDU 2602 Bone Collector (01背包DP)
    HDU 5918 Sequence I (KMP)
    关于一些逗逼函数//atoi,itoa,strtok,strupr,
    二叉树—-1(No.9HN省赛小题)
  • 原文地址:https://www.cnblogs.com/zhqin/p/9916307.html
Copyright © 2011-2022 走看看