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())
  • 相关阅读:
    P2420 让我们异或吧(倍增)
    bzoj题目分类
    hash练习们
    bzoj1433[ZJOI2009]假期的宿舍(匈牙利)
    bzoj2427:[HAOI2010]软件安装(Tarjan+tree_dp)
    bzoj2730矿场搭建(Tarjan割点)
    codevs4511信息传递(Tarjan求环)
    进入js
    css层叠样式表
    HTML超文本标记语言
  • 原文地址:https://www.cnblogs.com/wt7018/p/11074486.html
Copyright © 2011-2022 走看看