zoukankan      html  css  js  c++  java
  • python 协程

    一、实质

    协程的本质是线程

    在多个任务之间切换来节省一些IO时间

    进程和线程是操作系统调度

    协程是代码调度

    二、greenlet

    from greenlet import greenlet
    
    
    def eat():
        print('start eat')
        g2.switch()
        print('end eat')
        g2.switch()
    
    
    def play():
        print('start play')
        g1.switch()
        print('end play')
    
    
    g1 = greenlet(eat)
    g2 = greenlet(play)
    g1.switch()
    """
    打印:
    start eat
    start play
    end eat
    end play
    """

    三、gevent

    """
    常用方法
    from gevent import monkey;monkey.patch_all()
    打补丁,用于识别IO
    gevent.spawn(方法名, 参数)
    创建协程对象
    obj.join() 等待协程对象的结果
    obj.value() 协程对象的返回值,等待协程执行结束
    """
    from gevent import monkey;monkey.patch_all()
    import gevent
    import time
    
    
    def eat():
        print('start eat')
        time.sleep(0.5)
        print('end eat')
    
    
    def play():
        print('start play')
        time.sleep(0.5)
        print('end play')
    
    
    g1 = gevent.spawn(eat)
    g1.join()   # 等待g1执行结束
    g2 = gevent.spawn(play)
    g2.join()   # 等待g2执行结束
    """
    打印:
    start eat
    start play
    end eat
    end play
    """
    from gevent import monkey;monkey.patch_all()
    import gevent
    def test(n):
        print('a')
        return n
    g = gevent.spawn(test, 1)
    g2 = gevent.spawn(test, 1)
    li = [g, g2]
    gevent.joinall(li)print(g.value())
  • 相关阅读:
    净化-湿式除尘器:湿式除尘器
    净化-袋式除尘器:袋式除尘器
    LOCK
    locale
    loadkeys
    LOAD
    ln -在文件之间建立连接
    lmhosts
    listen
    listalias
  • 原文地址:https://www.cnblogs.com/wt7018/p/11074486.html
Copyright © 2011-2022 走看看