zoukankan      html  css  js  c++  java
  • python asyncio wait和gather

    1. wait, 等待某某执行完成以后才执行下一步

    FIRST_COMPLETED = concurrent.futures.FIRST_COMPLETED
    FIRST_EXCEPTION = concurrent.futures.FIRST_EXCEPTION
    ALL_COMPLETED = concurrent.futures.ALL_COMPLETED
    import asyncio
    import time
    async def get_html(term):
        print("start get url")
        await asyncio.sleep(term)
        print("end get url")
    
    if __name__ == '__main__':
        group1 = [get_html(i) for i in range(10)]
        loop = asyncio.get_event_loop()
        import concurrent.futures
        loop.run_until_complete(asyncio.wait(group1, return_when=concurrent.futures.FIRST_COMPLETED))
        print(1)

     2. gather 比wait更加高级,可以将任务分组,并且取消掉,取消时,必须设置 return_exception为True,不然会抛异常

    import asyncio
    import time
    async def get_html(url):
        print("start get url")
        await asyncio.sleep(2)
        print("end get url")
    
    if __name__ == "__main__":
        start_time = time.time()
        loop = asyncio.get_event_loop()
        #gather和wait的区别
        #gather更加high-level
        group1 = [get_html("http://projectsedu.com") for i in range(2)] # 分组
        group2 = [get_html("http://www.imooc.com") for i in range(2)]
        group1 = asyncio.gather(*group1)
        group2 = asyncio.gather(*group2)
        group2.cancel()
        loop.run_until_complete(asyncio.gather(group1, group2, return_exceptions=True))
        print(time.time() - start_time)
  • 相关阅读:
    28、数组中出现次数超过一半的数字
    27、字符串的排列
    26、二叉搜索树与双向链表
    21、栈的压入、弹出序列
    22、从上往下打印二叉树
    23、二叉搜索树的后序遍历序列
    24、二叉树中和为某一值的路径
    25、复杂链表的复制
    4、简单工厂模式,工厂方法模式,
    基数排序
  • 原文地址:https://www.cnblogs.com/callyblog/p/11217158.html
Copyright © 2011-2022 走看看