• asyncio


    # 协程 + 事件循环

    import asyncio
    async def func():  # async关键字不能和yield一起使用,引入coroutine装饰器来装饰downloader生成器。
        print('start')
        # 异步调用asyncio.sleep(1):
        await asyncio.sleep(1)  # time.sleep 异步的接口 对象 必须实现__await__
        # await 就相当于 yield from
        print('end')
    # 获取EventLoop:
    loop = asyncio.get_event_loop()
    task1 = loop.create_task(func())
    task2 = loop.create_task(func())
    # 执行coroutine
    loop.run_until_complete(asyncio.wait([task1, task2]))
    # loop.run_until_complete(func())

    # asyncio是一个底层模块

    # 他完成了几个任务的轮流检测io,并且在遇到io的时候能够及时在任务之间进行切换
    # 然后达到使用单线程实现异步的方式
    # aiohttp
    # 完全使用asyncio作为底层模块完成的
     
    # loop 你的循环
    # 你的协程任务就是 被async语法约束的 函数
    # 你的协程任务遇到io才能切出去,如何标识你的任务遇到io了呢? await 对象
     
    # async 语法 帮助我们创建协程任务
    # asyncio模块 : 异步io模块 对协程任务的循环管理 内置了很多异步的接口帮助我们 异步的socketserver,采用异步的形式去访问socket server
     
     
    # 执行多个任务按照返回的顺序获取返回值
    import asyncio 
    async def hello(i):
        print("Hello world!",i)
        await asyncio.sleep(i)
        print("Hello again!")
        return 'done', i 
    async def main():
        tasks = []
        for i in range(5):
            tasks.append(asyncio.ensure_future(hello((20 - i) / 10)))
     
        for res in asyncio.as_completed(tasks):
            result = await res
            print(result)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
     
    dayehui
  • 相关阅读:
    UVALive
    BZOJ2120:数颜色(数状数组套主席树)(带修改的莫对)
    BZOJ-3439:Kpm的MC密码(Trie+DFS序+主席树)
    51nod1674:区间的价值2(分治,利用&和|的收敛性)
    [CQOI2009]DANCE跳舞
    [HNOI2006]超级英雄
    Luogu1613 跑路
    [HZOI 2016]公路修建
    [NOI2014]魔法森林
    [HAOI2006] 旅行
  • 原文地址:https://www.cnblogs.com/zrh-960906/p/12152939.html
Copyright © 2020-2023  润新知