greenlet是python中实现协程的一个模块。
1. greenlet的简单使用
from greenlet import greenlet
def eat(name):
print(name,'eat one')
g2.switch(name)
print(name,'eat two')
g2.switch()
def play(name):
print(name, 'play one')
g1.switch(name)
print(name, 'play two')
g1=greenlet(eat)
g2=greenlet(play)
g1.switch('zhangsan')
输出:
zhangsan eat one
zhangsan play one
zhangsan eat two
zhangsan play two
2. Gevent的简单使用
gevent是对greenlet的包装,可以自动切换协程,不需要如上个实例调用switch才能切换。
monkey.patch_all():猴子补丁如果遇见耗时操作会自动进行协程的切换。
from gevent import monkey;monkey.patch_all()
import gevent
import time
def eat(name):
print(name, 'eat one')
# gevent.sleep(3)
time.sleep(2)
print(name, 'eat two')
def play(name):
print(name, 'play one')
# gevent.sleep(3)
time.sleep(3)
print(name, 'paly two')
ctime = time.time()
gevent.joinall([
gevent.spawn(eat, 'egon'),
gevent.spawn(play, 'egon')
])
print('耗时:')
print(time.time() - ctime)
输出:
egon eat one
egon play one
egon eat two
egon paly two
耗时:
3.0192954540252686