Eventlet 是 由第二人生(Secondlife )开源的高度伸缩性的Python网络编程库.
Eventlet 可以用来处理多线程方面的工作,但它使用的是 green threads 概念,所以用资源的开销很少。
根据官方介绍大致特性如下:
非阻塞I/O模型协程(Coroutines)使得开发者可以采用阻塞式的开发风格,却能够实现非阻塞I/O的效果隐式事件调度,使得可以在Python解释器或者应用程序的某一部分去使用Eventlet
关于协程,大致可以理解成允许子程序可以多次暂停和恢复执行,是实现多任务的一种有效手段, 具体见这里.
在Python的世界里,实现了nonblocking I/O的产品并不算少.比如内置的Asyncore和著名的Twisted.相比之下,Eventlet是更容易上手和使用的。
举个例子
import eventlet
pool = eventlet.GreenPool()
while True: pool.spawn(func,args )
上面这段代码,几乎就是使用eventlet的范式:
GreenPool 用来实现协程,保证并行;Spawn 用来调用相应的函数,完成具体业务.
每个func之间切换,实施“你运行一会、我运行一会”,并且在进行切换时必须指定何时切换以及切换到 哪,当出现阻塞时,就显式切换到另一 段没有被阻塞的代码段执行,直到原先的阻塞状况消失以后,再人工切换回原来的代码段继续处理.
注: 在python2.4中,from eventlet import *, 在python2.7中,import eventlet