协程的真正的意义在哪里?我写了两个程序对比

我写了两段代码分别执行、
第一段代码:
由廖雪峰老师的程序改编使用了协程的思维

import time

def consumer():
    r = ''
    while True:
        n = yield r
        if not n:
            return
        q = 100
        while q:
            q -= 1
            time.sleep(0.1)
            print('Consumer runing %d...' % q)
        print('[CONSUMER] Consuming %s...' % n)
        r = '200 OK'

def produce(c):
    next(c)
    n = 0
    while n < 5:
        n = n + 1
        q = 100
        while q:
            q -= 1
            time.sleep(0.1)
            print('Loading %d...' % q)
        print('[PRODUCER] Producing %s...' % n)
        r = c.send(n)
        print('[PRODUCER] Consumer return: %s' % r)
    c.close()

if __name__=='__main__':
    start = time.time()
    c = consumer()
    produce(c)
    print('Use time: %.3fs' % (time.time() - start))

第二段用来对比:
自己写了简单的函数调用方法

import time

def consumer(n):
    r = ''
    q = 100
    while q:
        q -= 1
        time.sleep(0.1)
        print('Consumer runing %d...' % q)
    print('[CONSUMER] Consuming %s...' % n)
    return '200 OK'

def produce():
    n = 0
    while n < 5:
        n = n + 1
        q = 100
        while q:
            q -= 1
            time.sleep(0.1)
            print('Loading %d...' % q)
        print('[PRODUCER] Producing %s...' % n)
        r = consumer(n)
        print('[PRODUCER] Consumer return: %s' % r)

if __name__=='__main__':
    start = time.time()
    produce()
    print('Use time: %.3fs' % (time.time() - start))

运行以下可以轻易的发现两段代码所执行的结果是一样的、

第一段代码所花的时间
Use time: 100.310s
第二段代码所花时间
Use time: 100.314s
两段代码花费的时间也差不多

代码量、相差无几

这就让我很头痛了
简单的函数调用是两个函数之间调用并返回相应的数据
而协程写的代码是两个函数之间相互调用、相互传送数据也没有做到两个函数同时进行
那么,协程发明的意义在哪里呢?就仅仅为了这0.004s的时间差么?

阅读 4.4k
3 个回答

如果 consumer 函数开始部分再多一些逻辑或初始化类的代码,你就知道差距和哪个写法更方便了。

python里协程的好处是异步操作的代码连贯性,你这里也没有异步操作,sleep的时候整个线程都停了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题