我写了两段代码分别执行、
第一段代码:
由廖雪峰老师的程序改编使用了协程的思维
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的时间差么?
コンシューマー関数の先頭にさらに多くのロジックまたは初期化クラス コードがある場合、そのギャップと、どの記述方法がより便利であるかがわかります。
Python のコルーチンの利点は、非同期操作のコードの一貫性です。スリープ中にスレッド全体が停止します。
対象者には、少し古い記事ですが、「A Curious Course on Coroutines and Concurrency」を読むことをお勧めします。