05: greenlet:轻量级的并发编程

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已死,不会再切换。
greenlet官方事例

1111111111111111111111111111

猜你喜欢

转载自www.cnblogs.com/xiaonq/p/10443763.html
05
今日推荐