greenlet
greenlet
Greenlet是python的一个C扩展,提供可自行调度的协程
当一个greenlet遇到IO操作,如访问网络、文件操作时,就自动切换到其他greenlet,等IO操作完成,再在适当的时间切换回来继续执行
greenlet实现的协程在yield value时只能将value返回给调用者caller
greenlet用switch来表示协程的切换,从一个协程切换到另一个协程需要显示指定
greenlet
greenlet.greenlet(func)
功能:创建greenlet对象
参数:
target:协程执行的函数名
obj.switch(value)
功能:切换到指定的协程target,并从上一次保存状态的位置开始继续向下执行
返回值:yield value
import time
from greenlet import greenlet
# 创建work1
def work1(n):
while True:
print(f'work1----------{n}')
time.sleep(0.5)
# 切换到另一个函数
res = g2.switch('run2')
print(res)
# 创建work2
def work2(m):
while True:
print(f'{m}----------work2')
time.sleep(0.5)
# 切换到另一函数
res = g1.switch('run1')
print(res)
if __name__ == '__main__':
# 创建greenlet对象
g1 = greenlet(work1)
g2 = greenlet(work2)
# 起始执行的函数
g1.switch('run1')
print('No')
work1----------run1
run2----------work2
run1
work1----------run1
run2
run2----------work2
run1
work1----------run1
run2
run2----------work2
run1