1.greenlet定义:
gevent中使用的主要模式是greenlet,它是一个轻量级协程,作为C扩展模块提供给python, greenlet都是在主程序的操作系统进程内部运行,但都是协同调度的
在任何给定的时间内,只有一个greenlet在运行
2.并发的概念:
并发是指两个或多个事件在同一时间间隔发生
并发性的核心思想是将一个较大的任务分解为一组子任务,这些子任务被计划为同时或异步运行,而不是一次运行一个或同步运行,简单说就是两个或多个事件在同一时间间隔发生
3.greenlet上下文切换
两个子任务之间的切换称为上下文切换,Greenlet中的上下文切换是通过switch实现的
单个线程内可以运行任意个greenlet协程,不同线程之间不能切换greenlet
4.greenlet代码实例:
from greenlet import greenlet
def fun1(param1,param2):
print("start fun1")
z = gr2.switch(param1+param2) # 切换到协程实例二中执行
print(z)
print("end fun1") # 执行结束,返回主线程
def fun2(param3):
print("start fun2")
print(param3)
gr1.switch(33) # 切换到协程实例一中执行,传递参数给上一个运行节点
print("end fun2") # 不会执行该行代码
if __name__ == "__main__":
gr1 = greenlet(fun1) # 协程实例一
gr2 = greenlet(fun2) # 协程实例二
gr1.switch("hello", 'ketty') # 切换到协程一执行,传入两个参数
print("end main")
运行结果: