• Python并发编程-协程


    利用Greenlet模块在多线程之间切换

    from greenlet import greenlet
    def eat():
        print('eating start')
        g2.switch()
        print('eating end')
        g2.switch()
    
    def play():
        print('playing start')
        g1.switch()
        print('playing end')
    
    g1 = greenlet(eat)
    g2 = greenlet(play)
    g1.switch()
    

    利用Greenevent模块在协程之间切换

    from gevent import monkey;monkey.patch_all()
    import gevent
    import time
    
    def eat():
        print('eating start')
        # gevent.sleep(1) #一定要有gevent.sleep,传统的time.sleep无效
        #解决方法,引入monkey.patch_all()
        time.sleep(1)
        print('eating end')
    
    
    def play():
        print('playing start')
        # gevent.sleep(1)
        time.sleep(1)
        print('playing end')
    
    g1 = gevent.spawn(eat) #开启gevent协程
    g2 = gevent.spawn(play) #spawn是关键字
    g1.join() #必须要join()
    g2.join() 
    

    同步和异步的比较

    from gevent import monkey;monkey.patch_all()
    import gevent
    import time
    
    def task():
        time.sleep(1)
        print(12345)
    
    def sync():
        for i in range(10):
            task()
    
    def async():
        g_lst = []
        for i in range(10):
            g = gevent.spawn(task)
            g_lst.append(g)
        # for g in g_lst:g.join() #下面这句等同
        gevent.joinall(g_lst)
    
    # sync()
    async()
    
    #异步的时候一起打印出来
    
  • 相关阅读:
    HTML颜色表
    grid
    DOM和BO
    注册表
    js 正则表达式
    python学习之路(一)
    python学习之路(三)
    python学习之路(二)
    自己编写的泛型集合类(其实是照着微软的List写的)
    客户端回调服务端无刷新事件
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9713352.html
Copyright © 2020-2023  润新知