python爬虫(十三、异步协程基本的使用)

    技术2022-07-10  99

    使 用 协 程 , 第 一 步 创 建 协 程 对 象 \color{Red}使用协程,第一步创建协程对象 使,

    第 二 步 , 创 建 事 件 循 环 对 象 第二步,创建事件循环对象 ,

    第 三 步 , 把 协 程 对 象 注 册 到 事 件 循 环 对 象 去 并 执 行 第三步,把协程对象注册到事件循环对象去并执行 ,

    使用async修饰函数让函数可以返回一个协程

    import asyncio async def run(): print('开始执行协程内容!') print('执行完毕!!') c = run() #获得一个协程对象 #创建一个事件循环对象 loop = asyncio.get_event_loop() #将协程注册到loop中并启动loop loop.run_until_complete(c)

    上面就是最基本的协程使用啦!现在来说说task

    task对象,基本等同于协程对象,但是可以记录更多信息

    import asyncio async def run(): print('开始执行协程内容!') print('执行完毕!!') c = run() loop = asyncio.get_event_loop() task = loop.create_task(c) #使用loop创建的task对象 loop.run_until_complete(task)

    下面是用task对象完成一个多任务异步协程

    看 看 每 个 协 程 之 间 的 执 行 是 否 是 异 步 的 看看每个协程之间的执行是否是异步的

    import asyncio import time async def request(url): print('开始请求',url) #假如下面使用time.sleep(2)模拟阻塞操作,会发现耗时不变还是6s #因为异步协程中不能出现同步模块的代码 await asyncio.sleep(2) #使用await手动挂起 print('下载完毕',url) urls = { 'www.baidu.com', 'www.sogou.com', 'www.vmgirls.com' } start = time.time() loop = asyncio.get_event_loop() stasks = [] for url in urls: c = request(url) task = loop.create_task(c) stasks.append(task) loop.run_until_complete(asyncio.wait(stasks)) print(time.time()-start)

    结果

    Processed: 0.010, SQL: 9