当一个greenlet遇到IO操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。
由于切换是在IO操作时自动完成
提升单线程下,多个任务
python 3.4 再用这个monkey
#下面所有的但凡设计到的io操作,相当于打个标记
from gevent import monkey;monkey.patch_all()
import gevent
import time
def eat(name):
print('%s eat 1' % name)
time.sleep(3)
print('%s eat 2' % name)
def play(name):
print('%s play 1' % name)
time.sleep(4)
print('%s play 2' % name)
#异步
g1=gevent.spawn(eat,'egon')
g2=gevent.spawn(play,'alex')
#在上面的任务执行之后,线程才死
#time.sleep(5)
#主线程等着上面两个任务死了,在死 join()
#g1.join()
#g2.join()
#主线程等着上面两个任务死了,在死
gevent.joinall([g1,g2])