zoukankan      html  css  js  c++  java
  • Gevent-自动挡切换

    Gevent:

    Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。在greenlet 中用switch调度。

    例子1:

    import gevent
    
    def foo():
        print('Running in foo')
        gevent.sleep(2) #遇到sleep会被切换走
        print('Explicit context switch to foo again')
    
    def bar():
        print('Explicit context to bar')
        gevent.sleep(1) #又切换到上面,来回切换,直到sleep(1)结束。
        print('Implicit context switch back to bar')
    
    gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),]) #列表的形式启动2个协程
    

     运行结果:

    Running in foo
    Explicit context to bar
    Implicit context switch back to bar
    Explicit context switch to foo again
    

    例子2:

    import gevent
    
    def foo():
        print('Running in foo')
        gevent.sleep(2)
        print('Explicit context switch to foo again')
    
    def bar():
        print('Explicit context to bar')
        gevent.sleep(1)
        print('Implicit context switch back to bar')
    
    def func3():
        print('running in func3')
        gevent.sleep(0) #没有卡住,但是会触发一次切换
        print('running in func3 again')
    
    gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),gevent.spawn(func3)]) #列表的形式启动2个协程
    

     运行结果:三个之间来回切换foo-->bar--->func3,总共需要花费2s。哪个快就先执行完哪个。

    C:abccdxdddOldboypython-3.5.2-embed-amd64python.exe C:/abccdxddd/Oldboy/Py_Exercise/Day10/自动io切换.py
    Running in foo
    Explicit context to bar
    running in func3
    running in func3 again
    Implicit context switch back to bar
    Explicit context switch to foo again
    
  • 相关阅读:
    第一次上机作业
    第一次作业
    信号
    进程基础
    计算机网络(第七版)谢希仁编著 第四章课后答案详解
    shell脚本编程
    关于linux安装软件(Ubuntu)时遇见的常见问题处理
    Linux系统C语言开发环境学习
    LINUX下安装中文输入法
    处理《无法获得锁 /var/lib/dpkg/lock
  • 原文地址:https://www.cnblogs.com/momo8238/p/7372195.html
Copyright © 2011-2022 走看看