python - 协程的真正的意义在哪里?我写了两个程序对比
PHP中文网
PHP中文网 2017-04-18 09:05:07
0
3
386

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

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的时间差么?

PHP中文网
PHP中文网

认证0级讲师

모든 응답(3)
Ty80

Consumer 함수 시작 부분에 로직이나 초기화 클래스 코드가 더 있으면 그 격차와 어떤 방식이 더 편리한지 알 수 있을 것입니다.

刘奇

파이썬에서 코루틴의 장점은 비동기 작업의 코드 일관성입니다. 여기에는 절전 모드 시 전체 스레드가 중지됩니다.

巴扎黑

피험자에게 A Curious Course on Coroutines and Concurrency 기사를 읽어보라고 권합니다. 이 기사는 다소 오래되었지만 말입니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿