Discuss / Python / 对生产消费模型的解释

对生产消费模型的解释

Topic source
def consumer():
    r = ''
    while True:
        n = yield r
        if not n:
            return
        else:
            print('[CONSUMER] Consuming %s...' % n)
            r = '200 OK'

def producer(c):
    c.send(None)
    n = 0
    while n < 5:
        n = n + 1
        print('[PRODUCER] Producing %s...' % n)
        r = c.send(n)
        print('[PRODUCER] Consuming %s...' % r)
    c.close()

c = consumer()
producer(c)

大家比较难理解的是consumer()函数中的 n = yield r这个语句。

首先要明确的一点是这既是一个赋值语句又不是一个赋值语句。 在什么情况下这是一个赋值语句呢? 当我们在使用c.send(x)的时候,这个语句可以简化成这样:n = yield 这条语句的意思是把c.send(x)中的x赋值给n, 函数consumer()也不会产生中断,因为yield在此的作用仅仅是接收参数而已。 在什么情况下这是一个generator中普通的yield呢? 在没有使用c.send(x)的时候。 不知道这样解释是否清楚


  • 1

Reply