一、协程
符合协程的条件:
1、必须在一个单线程中实现并发
2、一个协程遇见IO操作自动切换到其他协程
3、修改共享数据不需要加锁
4、用户程序中自己保存多个控制流的上下文
Greenlet模块:Gevent模块是一个用c实现协成的模块,请看如下代码中greenlet的使用。但是greenlet并没有实现遇见IO就切换的功能。。。。
1 from greenlet import greenlet 2 import time 3 def func1(): 4 print(1) 5 time.sleep(2) 6 gr2.switch() 7 print(3) 8 gr2.switch() 9 def func2(): 10 print(2) 11 gr1.switch() 12 print(4) 13 gr1=greenlet(func1) 14 gr2=greenlet(func2) 15 gr1.switch()
那么如何实现协成遇见IO自动切换另外一个协程的功能? Gevent模块
Gevent模块和Greenlet模块差不多,请看:
1 import gevent,time 2 def f1(): 3 print(1) 4 gevent.sleep(1) #实现上下文的切换 5 print(2) 6 def f2(): 7 print(3) 8 gevent.sleep(1) 9 print(4) 10 time.sleep(1) 11 def f3(): 12 print(66666666666666666) 13 gevent.sleep(1) 14 15 gevent.joinall([gevent.spawn(f1),gevent.spawn(f2),gevent.spawn(f3)]) 16 #gevent.spawn(f1) 该协成作用于f1