协程

2019-05-14 11:10:45阅读 26评论 0

概念

协程是比线程更轻量级的用户态线程,是模拟出的线程。好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

实现

1.生成者消费者模型

    def eater():  
        while True:  
            food = yield#yield相当于return,同时也可以接收send()传进来的值  
            print("A dog is eating a %s" % food)  

    def producer(num):  
        num=num#接收参数num  
        e=eater()  
        e.__next__()  
        for  i in range(num):  
            food="baozi"+str(i)#生产包子  
            print("producer have producted a %s"%food)  
            ##############################  
            e.send(food)#把食品传送给消费者,这里的send有两个作用:1.将e执行__next__方法2.将参数传递给e里的yield  

    producer(10)

结果:

    producer have producted a baozi0  
    A dog is eating a baozi0  
    producer have producted a baozi1  
    A dog is eating a baozi1  
    producer have producted a baozi2  
    A dog is eating a baozi2  
    producer have producted a baozi3  
    A dog is eating a baozi3  
    producer have producted a baozi4  
    A dog is eating a baozi4  
    producer have producted a baozi5  
    A dog is eating a baozi5  
    producer have producted a baozi6  
    A dog is eating a baozi6  
    producer have producted a baozi7  
    A dog is eating a baozi7  
    producer have producted a baozi8  
    A dog is eating a baozi8  
    producer have producted a baozi9  
    A dog is eating a baozi9  

    Process finished with exit code 0

2.gevent使用(需安装)

    import gevent  

    def do():  
        print("step1")  
        gevent.sleep(2)#模拟i/o操作  
        print("step3")  

    def run():  
        print("step2")  
        gevent.sleep(2)#模拟i/o操作  
        print("step4")  

    gevent.joinall([  
        gevent.spawn(do),  
        gevent.spawn(run)  
    ])

结果:

    step1  
    step2  
    step3  
    step4  

    Process finished with exit code 0

还没有评论,来说两句吧