zoukankan      html  css  js  c++  java
  • Python greenlet模块的使用

    from greenlet import greenlet
    # -*- coding: utf-8 -*-
    from greenlet import greenlet
    #定义一个函数
    def test1():
        print("test1 begin")
        gr2.switch()
        print("test1 end")
    
    
    #定义一个函数
    def test2():
        print("test2 begin")
        gr1.switch()
        print("test2 end")
    
    """
    gr1=greenlet(test1),创建一个协程对象gr1,其参数是函数test1,也就是该协程运行的时候,执行的是该函数test1
    gr2=greenlet(test2),创建一个协程对象gr1,其参数是函数test2,也就是该协程运行的时候,执行的是该函数test2
    两个协程对象创建以后,并不马上执行,需要程序主动地调度才能执行起来,这个调度函数就是协程对象的成员函数switch.
    当有协程被调度时,另一个协程就会被挂起,直到那个协程运行完毕,,再主动切换到该挂起的协程才会继续运行
    该调度的输出内容分析:
    gr1.switch() 主动地调度协程gr1,因此进入到test1中,输出print("test1 begin"),但在函数内执行到gr2.switch()时,
    gr1挂起,切换到gr2协程中,从而进入test2中,输出print("test2 begin"),再次遇到gr1.switch(),gr2挂起,切换到
    gr1中,继续从挂起的位置,开始执行,输出print("test1 end"),因此协程gr1执行完毕,但是gr2没有其他的程序主动切换到gr2,
    因此gr2还是处于挂起的状态,因此print("test2 end")不会输出,因此整体的输出内容如下:
    test1 begin
    test2 begin
    test1 end
    """
    #创建两个greentlet对象:gr1,gr2
    gr1=greenlet(test1)
    gr2=greenlet(test2)
    #调度gr1执行,gr1.switch() 主动地调度协程gr1
    gr1.switch()

    输出结果如下:

    D:python3-codeScriptspython.exe D:/python3-code/eventlet_model.py
    test1 begin
    test2 begin
    test1 end
    
    Process finished with exit code 0

    要想test2 end也输出来的话,需要在test1函数的print("test1 end"),下面,再新增一条gr2.switch()

    from greenlet import greenlet
    #定义一个函数
    def test1():
        print("test1 begin")
        gr2.switch()
        print("test1 end")
        gr2.switch()
    
    #定义一个函数
    def test2():
        print("test2 begin")
        gr1.switch()
        print("test2 end")

    输出内容如下:

    D:python3-codeScriptspython.exe D:/python3-code/eventlet_model.py
    test1 begin
    test2 begin
    test1 end
    test2 end
    
    Process finished with exit code 0
    

      

  • 相关阅读:
    Asymptote 学习记录(1):基本的安装以及用批处理模式和交互模式绘图
    导函数的介质定理
    在新浪云上建立了一个wordpress独立博客
    数学分析原理 定理 6.10
    数学分析原理 定理 6.12
    opencvSparseMat稀疏矩阵
    基于MRSHudi构建数据湖的典型应用场景介绍
    解析云原生2.0架构设计的8大关键趋势
    全链路数据血缘在满帮的实践
    10年经验总结,华为fellow教你如何成为一名优秀的架构师?
  • 原文地址:https://www.cnblogs.com/potato-chip/p/14667865.html
Copyright © 2011-2022 走看看