pythhon_协程&异步IO

一、协程

    符合协程的条件:

    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
原文地址:https://www.cnblogs.com/songxiaonan/p/6208115.html