协程

作者: 追梦若苦希望暖之 | 来源:发表于2021-01-27 10:33 被阅读0次

    1.yield实现多任务

    import time
    
    def task_1():
        while True:
            print("---1---")
            time.sleep(.5)
            yield
            
    def task_2():
        while True:
            print("---2---")
            time.sleep(.5)
            yield
        
    def main():
        t1 = task_1()
        t2 = task_2()
        while True:
            next(t1)
            next(t2)
    
    main()
    
    image.png

    2.gevent实现多任务

    import gevent
    
    
    def task1():
        while True:
            print("1")
            gevent.sleep(.5)
    
    def task2():
        while True:
            print("2")
            gevent.sleep(.5)
    
    def task3():
        while True:
            print("3")
            gevent.sleep(.5)
    
    g1 = gevent.spawn(task1)
    g2 = gevent.spawn(task2)
    g3 = gevent.spawn(task3)
    
    g1.join()
    g2.join()
    g3.join()
    
    
    image.png
    import gevent
    
    
    def task1():
        while True:
            print("1")
            # gevent.sleep(.5)
    
    def task2():
        while True:
            print("2")
            # gevent.sleep(.5)
    
    def task3():
        while True:
            print("3")
            # gevent.sleep(.5)
    
    g1 = gevent.spawn(task1)
    g2 = gevent.spawn(task2)
    g3 = gevent.spawn(task3)
    
    g1.join()
    g2.join()
    g3.join()
    
    

    取消延时函数后、阻塞在task1死循环

    协程的核心思想是分配线程的执行时间片


    3.自动优化时间片

    import gevent
    from gevent import monkey
    import time
    
    monkey.patch_all()  #自动规划ask中的延时片轮转
    
    def task1():
        while True:
            print("1")
            time.sleep(.5)
    
    def task2():
        while True:
            print("2")
            time.sleep(.5)
    
    def task3():
        while True:
            print("3")
            time.sleep(.5)
           
    gevent.joinall(
        [
            gevent.spawn(task1),
            gevent.spawn(task2),
            gevent.spawn(task3)
        ]
    ) 
    

    4.Python语言原生协程

    import asyncio
    
    async def nested():
        return 42
    
    async def main():
        # Schedule nested() to run soon concurrently
        # with "main()".
        task = asyncio.create_task(nested())
    
        # "task" can now be used to cancel "nested()", or
        # can simply be awaited to wait until it is complete:
        await task
    
    asyncio.run(main())
    

    相关文章

      网友评论

          本文标题:协程

          本文链接:https://www.haomeiwen.com/subject/vrbgzktx.html