1.1 greenlet简介
1、greenlet原理 & 使用
1. greenle间切换
1)一个 “greenlet” 是一个很小的独立微线程,可以把它想像成一个堆栈帧,栈底是初始调用,而栈顶是当前greenlet的暂停位置。
2)你使用greenlet创建一堆这样的堆栈,然后在他们之间跳转执行。
3)跳转不是绝对的:一个greenlet必须选择跳转到选择好的另一个greenlet,这会让前一个挂起,而后一个恢复,
两 个greenlet之间的跳转称为 切换(switch) 。
2. 每个greenlet生命周期
1)当你创建一个greenlet,它得到一个初始化过的空堆栈;
2)当你第一次切换到它,他会启动指定的函数,然后切换跳出greenlet。
3)当最终栈底 函数结束时,greenlet的堆栈又变成空的了,greenlet也会因为一个未捕捉的异常死掉。
#! /usr/bin/env python # -*- coding: utf-8 -*- from greenlet import greenlet def test1(): print 12 gr2.switch() print 34 def test2(): print 56 gr1.switch() print 78 gr1 = greenlet(test1) gr2 = greenlet(test2) gr1.switch() '''打印结果:12 56 34 (test2的78不会打印)''' # 1、最后一行跳转到 test1() ,它打印12 # 2、然后跳转到 test2() ,打印56 # 3、然后跳转回 test1() ,打印34 # 4、然后 test1() 就结束,gr1死掉 # 5、这时执行会回到原来的 gr1.switch() 调用。 #### 注意,78是不会被打印的,因为gr1已死,不会再切换。
1111111111111111111111111111