zoukankan      html  css  js  c++  java
  • 协程嵌套协程

    import asyncio
    import functools
    
    # 第三层协程
    async def test1():
        print('我是test1')
        await asyncio.sleep(1)
        print('test1已经睡了1秒')
        await asyncio.sleep(3)
        print('test1又睡了3秒')
        return 'xiong'
    
    # 第三层协程
    async def test2():
        print('我是test2')
        await asyncio.sleep(2)
        print('test2已经睡了2秒')
        await asyncio.sleep(2)
        print('test2又睡了2秒')
        return 'fan'
    
    # 第三层协程
    async def test3():
        print('我是test3')
        await asyncio.sleep(3)
        print('test3已经睡了3秒')
        await asyncio.sleep(1)
        print('test3又睡了1秒')
        return 'yong'
    
    # 第三层协程
    async def test4():
        print('我是test4')
        await asyncio.sleep(4)
        print('test4已经睡了4秒')
        await asyncio.sleep(1)
        print('test4又睡了1秒')
        return 'fan'
    
    # 协程回调函数
    def callback_test1(name, future):
        print(future.result()[0]+name)
    
    # 第二层协程
    async def main():
        tasks = [
            asyncio.ensure_future(test1()),
            asyncio.ensure_future(test2()),
            asyncio.ensure_future(test3()),
        ]
        res = await asyncio.gather(*tasks)
        return res
    
    # 第二层协程
    async def main1():
        res = await test4()
        return res
    
    # 最外层协程(主入口)
    async def z_main():
        tasks = [
            asyncio.ensure_future(main()),
            asyncio.ensure_future(main1())
        ]
        # 用了偏函数传其他参数
        tasks[0].add_done_callback(functools.partial(callback_test1, 'fanyong'))
        res1 = await asyncio.gather(*tasks)
        return res1
    
    if __name__ == '__main__':
        # tasks = [
        #     asyncio.ensure_future(test1()),
        #     asyncio.ensure_future(test2()),
        #     asyncio.ensure_future(test3()),
        # ]
        # tasks[0].add_done_callback(functools.partial(callback_test1, 'fanyong'))
        loop = asyncio.get_event_loop()
        res2 = loop.run_until_complete(z_main())
        print(res2)
  • 相关阅读:
    浅谈3次登录错误
    JDK一键安装,配置环境
    火炬之光2_辅助工具 内存读写相关
    学习资料
    如何在google colab加载kaggle数据
    Trie树
    日常
    Kmeans
    【leet-code】135. 加油站
    Mac CLion下OpenGL环境配置
  • 原文地址:https://www.cnblogs.com/xiongfanyong/p/13403525.html
Copyright © 2011-2022 走看看