当我们在受限于网络或IO的函数中使用gevent,这些函数会被协作式的调度,gevent的真在能力会得到发挥。
Gevent处理了所有的细节,来保证你的网络会在可能的时候,隐式交出greenlet上下文的执行权。这样的一种用法是如何的强大,怎么强调都不为过。举例说明
下面例子中的select()函数通常是一个在各种文件描述符上轮询的阻塞调用。
import time
import gevent
from gevent import select
start = time.time()
tic = lambda:'at %1.1f seconds'%(time.time() - start)
def gr1():
print 'Started polling:%s'%tic()
select.select([],[],[],2)
print 'Ended polling:%s'%tic()
def gr2():
print 'Started polling:%s'%tic()
select.select([],[],[],2)
print 'Ended polling:%s'%tic()
def gr3():
print 'Hey lets do some stuff while the greedlets poll,%s'%tic()
gevent.joinall([
gevent.spawn(gr1),
gevent.spawn(gr2),
gevent.spawn(gr3),
])