如果我们在单个线程内有多个任务,要想实现在多个任务之间切换,使用yield生成器的方式过于麻烦(需要先得到初始化一次的生成器,然后再调用send,非常麻烦),而使用greenlet模块可以非常简单地实现这多个任务直接的切换
import time
from greenlet import greenlet
def eat(name):
print('%s eat 1' % name)
time.sleep(10)
g2.switch('winnie')
print('%s eat 2' % name)
g2.switch()
def play(name):
print('%s play 1' % name)
g1.switch()
print('%s play 2' % name)
g1 = greenlet(eat)
g2 = greenlet(play)
g1.switch('winnie') # 可以在第一次switch时传入参数,以后都不需要
结果:
winnie eat 1
winnie play 1
winnie eat 2
winnie play 2