zoukankan      html  css  js  c++  java
  • 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()
    
    #异步的时候一起打印出来
    
  • 相关阅读:
    广播与服务知识点总结
    Intent和Activity知识点总结
    数据库基础
    Java 中JOptionPane的基本使用方法
    Eclipse 自动补全功能失效解决办法及修改快捷键方法
    hdu 2095 find your present (2)
    sort()
    qsort()
    算法学习——分治算法
    NYOJ——街区最短路径问题
  • 原文地址:https://www.cnblogs.com/konglinqingfeng/p/9713352.html
Copyright © 2011-2022 走看看