python的协程

一、协程

1、什么是协程

协程,又称微线程,纤程。英文名Coroutine。

优点:

(1)、没有像进程和线程那样的切换的开销。

(2)、没有锁的概念。

协程本质上就是一个线程。

最佳利用多核cpu的方案就是多进程+协程。

2、yield生成器回顾

# 生成器yield回顾

def foo():
    print("ok")
    s = yield 6 #yield返回一个6,s是接受外部send过来的值
    print(s)
    print("ok2")
    yield

gen=foo()
num=next(gen)
print(num)
gen.send(100)

#例子讲解:将Foo()函数赋值给gen,用next方法执行gen(生成器的运行方式),这个时候函数返回一个6,并用num变量接收,gen在send一个100的数值给foo函数,由foo函数内的s接收并进行后续的执行。
#执行的时候遇到yield会临时退出,需要用next再次激发才能继续后续的步骤。

3、用yield实现生产者消费者模型

 1 import time
 2 
 3 def Consumer(name):
 4     print("ready to eat baozi....")
 5     while True:
 6         baozi = yield
 7         time.sleep(1)
 8         print("%s eat baozi %s" % (name,baozi))
 9 
10 def Producer(c1,c2):
11     c1.__next__()
12     c2.__next__()
13     count = 0
14     while True:
15         time.sleep(1)
16         print("33[32;1m[producer]33[0m is making baozi %s and %s" %(count,count+1))
17         c1.send(count)
18         c2.send(count+1)
19 
20         count +=2
21 
22 c1 = Consumer("zhangsan")
23 c2 = Consumer("lisi")
24 
25 Producer(c1,c2)
生成器实现生产者消费者模型
原文地址:https://www.cnblogs.com/xiaoqianghuihui/p/6869104.html