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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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保姆级教程