我写了两段代码分别执行、
第一段代码:
由廖雪峰老师的程序改编使用了协程的思维
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的时间差么?
S'il y a plus de code de logique ou de classe d'initialisation au début de la fonction consommateur, vous connaîtrez l'écart et quelle méthode d'écriture est la plus pratique.
L'avantage des coroutines en python est la cohérence du code des opérations asynchrones. Vous n'avez pas d'opérations asynchrones ici. Le thread entier s'arrête lorsqu'il est en veille
.Je recommande au sujet de lire cet article Un curieux cours sur les coroutines et la concurrence, bien qu'il soit un peu ancien.