Discuss / Python / 廖老师您好,对协程和普通函数调用还是有些混淆

廖老师您好,对协程和普通函数调用还是有些混淆

Topic source
# -*- coding: utf-8 -*-
import time
def consumer():
    r = 'xxx'
    while True:
        n = yield r
        if not n:
            return
        print('[CONSUMER] Consuming %s...' % n)
        r = '200 OK'
        time.sleep(2)

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

c = consumer()
produce(c)

我在第11行加了 time.sleep(2) 但是运行时却按照以下顺序输出:

[PRODUCER] Producing 1... [CONSUMER] Consuming 1... [PRODUCER] Consumer return: 200 OK 间隔2秒…… [PRODUCER] Producing 2... [CONSUMER] Consuming 2... [PRODUCER] Consumer return: 200 OK 间隔2秒…… …

按照我的思维应该是按以下顺序输出: [PRODUCER] Producing 1... [CONSUMER] Consuming 1... 间隔2秒…… [PRODUCER] Consumer return: 200 OK [PRODUCER] Producing 2... [CONSUMER] Consuming 2... 间隔2秒…… …

请问为什么会这样?? 先感谢!

Rainsho

#2 Created at ... [Delete] [Delete and Lock User]

我用你的代码,是你期待的那个效果

[PRODUCER] Producing 1... [CONSUMER] Consuming 1... 间隔2秒…… [PRODUCER] Consumer return: 200 OK [PRODUCER] Producing 2... [CONSUMER] Consuming 2... 间隔2秒…… …

对啊,用你的代码,是你期待的效果。


  • 1

Reply