zoukankan      html  css  js  c++  java
  • yield实现 coroutine协程案例

    yield可以手工实现协程,但python为我们封装了一个greenlet,先看看yield实现,yield需要手工操作,无法实现IO操作时自动切换协程,greenlet是封装好的,能方便使用io切换!

    import time

    import queue
    def consumer(name):
        print("--->starting eating baozi...")
        while True:
            new_baozi = yield
            print("[%s] is eating baozi %s" % (name,new_baozi))
            #time.sleep(1)
     
    def producer():
     
        = con.__next__()
        = con2.__next__()
        = 0
        while n < 5:
            +=1
            con.send(n)
            con2.send(n)
            print("33[32;1m[producer]33[0m is making baozi %s" %n )
     
     
    if __name__ == '__main__':
        con = consumer("c1")
        con2 = consumer("c2")
        = producer()
     
    方法二  
    greenlet实现方法:
    greenlet是一个用C实现的协程模块,相比与python自带的yield,它可以使你在任意函数之间随意切换,而不需把这个函数先声明为generator
    安装方法:
    pip install greenle
    如何使用请看下面例子!
     
    from greenlet import greenlet
     
    def test1():
        print(12)
        gr2.switch()#手工切换
        print(34)
        gr2.switch()#手工切换
     
     
    def test2():
        print(56)
        gr1.switch()
        print(78)
     
     
    gr1 = greenlet(test1)
    gr2 = greenlet(test2)
    gr1.switch()   #手工切换
     
     
    Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。
     
     
    import gevent
     
    def func1():
        print('33[31;1m李闯在跟海涛搞...33[0m')
        gevent.sleep(2)
        print('33[31;1m李闯又回去跟继续跟海涛搞...33[0m')
     
    def func2():
        print('33[32;1m李闯切换到了跟海龙搞...33[0m')
        gevent.sleep(1)
        print('33[32;1m李闯搞完了海涛,回来继续跟海龙搞...33[0m')
     
     
    gevent.joinall([
        gevent.spawn(func1),
        gevent.spawn(func2),
        #gevent.spawn(func3),
    ])
     
     
     
     
  • 相关阅读:
    刷题向》关于一道比较优秀的递推型DP(openjudge9275)(EASY+)
    刷题向》一道简单的思路题BZOJ1800(EASY+)
    算法描述》关于二分的两三事
    值得一做》关于一道暴搜BZOJ1024(EASY+)
    写一个C语言的链表记录一下
    qt 创建第一个工程
    windows好用的便签
    .pro文件部分命令详解
    QT 子文件的建立(pri)
    QTAction Editor的简单使用(简洁明了)
  • 原文地址:https://www.cnblogs.com/fgxwan/p/9647611.html
Copyright © 2011-2022 走看看