python协程和子程序区别?

一 协程

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

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)

二 子程序调用

def consumer(n):
    if not n:
        return
    print('[CONSUMER] Consuming %s...' % n)
    return '200 OK'

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

produce()

这两种结果一样,协程可以用子程序写,看不出协程有什么特别?

阅读 221
评论 2019-12-13 提问
    1 个回答

    协程是为了实现单线程的i/o密集型的任务并发(通过event loop),如果子程序的话,永远是串行的

    评论 赞赏
      撰写回答

      登录后参与交流、获取后续更新提醒