Python通过yield提供了对协程的基本支持,但是不完全。而第三方的gevent为Python提供了比较完善的协程支持。

gevent是第三方库,通过greenlet实现协程,其基本思想是:

当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。

由于切换是在IO操作时自动完成,所以gevent需要修改Python自带的一些标准库,这一过程在启动时通过monkey patch完成:

 

先了解greenlet,这个库用来学习的 功能不是很多。

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3  
 4  
 5 from greenlet import greenlet
 6  
 7  
 8 def test1():
 9     print 12
10     #切换到g2
11     gr2.switch()
12     print 34
13     #切换到g2继续执行上次的任务
14     gr2.switch()
15  
16  
17 def test2():
18     print 56
19     gr1.switch()
20     print 78
21  
22 gr1 = greenlet(test1)
23 gr2 = greenlet(test2)
24 gr1.switch()
View Code

相关文章: