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("\033[32;1m[producer]\033[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)