python 协程之asyncio (三)

嵌套

在一般的爬虫中,涉及的IO操作诸多,从网络请求到磁盘写入数据,都需要大量的时间成本,那么,如果封装大量的IO操作过程,

就会非常明显的提高效率,这个方式就是协程嵌套,可以通过一个协程await 其他协程来实现嵌套。

方法一:

复制代码
import asyncio,time
async def wait(name,hour):
    print ('%s 等待%d秒'%(name,hour))
    await asyncio.sleep(hour)
    return '%s 执行完成 '%name
async def run():
    name_list = ['jack', 'tom', 'mary', 'susan']
    # 封装协程对象列表
    coroutine_list=[]
    for i in range(len(name_list)):
        coroutine_list.append(wait(name=name_list[i],hour=i+1))
    # 封装任务对象列表
    task_list=[]
    for i in coroutine_list:
        task_list.append(asyncio.ensure_future(i))
    # 获取协程对象的执行结果,返回一个元组,dones是返回的执行结果
    dones,pendings=await asyncio.wait(task_list)
    for task in dones:
        print('执行结果:',task.result())
if __name__ == '__main__':
    now=lambda:time.time()
    start=now()
    loop=asyncio.get_event_loop()
    loop.run_until_complete(run())
    print('耗时: %0.3f'%(now()-start))
复制代码

 

 

方法二:

  使用gather创建协程对象,那么await的返回值就是协程对象运行的结果,对上述代码稍微修改:

results=await asyncio.gather(*task_list)
for result in results:
print('执行结果:',result)

 

posted @   瘦阿瘦  阅读(94)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
点击右上角即可分享
微信分享提示