当前位置: 首页 > news >正文

协程详细介绍

携程(协程)是什么 + 作用 + Python 极简代码举例

协程(Coroutine)

简单一句话:同一个线程里,来回切换执行多个任务,不用等一个卡死,就能跑下一个
适合:等待网络、等待IO、爬虫、接口请求、批量任务

协程核心作用

  1. 不占CPU,等待时自动切去干别的事
  2. 并发速度远超普通循环
  3. 开销比线程、进程小非常多
  4. 适合:爬虫、发请求、文件读写、接口批量调用

最简单易懂代码示例

1. 普通顺序执行(慢)

挨个等,干完一个才下一个

importtimedeftask(name):print(f"{name}开始干活")time.sleep(2)# 模拟等待耗时print(f"{name}干完了")start=time.time()task("任务1")task("任务2")task("任务3")end=time.time()print(f"总耗时:{end-start:.2f}秒")

运行结果:一共耗时 6秒左右

2. 协程并发执行(快很多)

等待的时候直接切去跑别的任务

importasyncioimporttime
协程函数必须加 async
asyncdeftask(name):print(f"{name}开始干活")awaitasyncio.sleep(2)# 协程专用等待(会让出资源)print(f"{name}干完了")asyncdefmain():start=time.time()# 一次性并发运行多个协程t1=asyncio.create_task(task("任务1"))t2=asyncio.create_task(task("任务2"))t3=asyncio.create_task(task("任务3"))awaitt1awaitt2awaitt3 end=time.time()print(f"总耗时:{end-start:.2f}秒")#启动协程程序asyncio.run(main())

运行结果:一共只耗时 2秒左右

关键区别看懂就会协程

  1. def 普通函数 → async def 协程函数
  2. time.sleep 卡死不动 → await asyncio.sleep 让出资源
  3. await:遇到等待,先去跑别的任务
  4. create_task:把任务丢进并发队列一起跑

实际常用场景:协程批量请求(爬虫例子)

importasyncioimportaiohttpasyncdeffetch(url):asyncwithaiohttp.ClientSession()assession:asyncwithsession.get(url)asresp:text=awaitresp.text()print(f"页面长度:{len(text)}")asyncdefmain():urls=["https://www.baidu.com","https://www.qq.com","https://www.sogou.com"]tasks=[fetch(u)foruinurls]awaitasyncio.gather(*tasks)asyncio.run(main())

一次性并发爬多个网站,速度飞快。

总结记忆

  • 协程= 单线程多任务切换
  • 遇到等待就切任务,提升IO任务速度
  • 关键字: async 、 await 、 create_task
  • 适合:爬虫、接口、批量查询、定时任务
http://www.cnnetsun.cn/news/2566607.html

相关文章:

  • D37: 周复盘:ToB 项目的 AI 落地方法论
  • 安卓手机安装龙虾openclaw接入deepseek
  • Win10系统清理避坑指南:你的BAT脚本真的安全吗?盘点那些不能乱删的文件
  • 支付宝商户池:收款防风控专属安全通道
  • 一匹来自顺德的布,凭什么走上国际时装周
  • html2pdf-chrome:一个 HTML 转 PDF 的 Go 库 / 服务,依旧是现阶段效果最佳的
  • Unity JSON解析救星:Newtonsoft.Json-for-Unity实战指南
  • C++基础 类和对象(三)
  • 别再折腾驱动了!用DKMS一劳永逸管理你的Linux网卡(以RTL8822CE/Ubuntu 18.04为例)
  • 别再死记硬背了!用Wirtinger导数轻松搞定复数求导(附Python代码验证)
  • 别再傻等自动下载了!手把手教你从国内镜像站搞定Wine 5.0的mono和gecko插件
  • LOOKAHEAD REASONING:大型推理模型的并行加速技术
  • RK3588 Debian 系统安装与WiFi/SSH配置笔记
  • FPG财盛国际:从风险提示看平台责任意识
  • Linux系统启动慢?从UEFI的DXE阶段入手,优化驱动加载让你的开机快人一步
  • 【复现】中国上市公司全要素生产率测算与分析(论文+数据)
  • 从Sora 2原始张量到可交付MP4:端到端Pipeline中被92%开发者忽略的色彩空间转换断点(BT.2020→BT.709→sRGB三级校准手册)
  • 【Claude AI深度SWOT解码】:20年AI架构师亲授,4大维度拆解其商用致命短板与突围路径
  • 你的副业计划又黄了。不是意志力的锅
  • 基于ESP32打造智能网络收音机:硬件选型、软件实现与音质优化全攻略
  • ESP32多任务水位监测:从Arduino到ESP-IDF的FreeRTOS实战
  • 高频率登录尝试 ip封禁已经实现
  • 给服务器添加最外层风控系统
  • 基于ESP8266与WS2812B的智能氛围灯DIY:从硬件连接到Web控制
  • 基于STM32WB与BLE-MIDI的体感节奏控制器:BeatShaker设计与实现
  • AMD锐龙SDT调试工具终极指南:5个进阶技巧解锁处理器深度调优
  • Linux——进程和线程
  • Linux服务器被挖矿木马劫持的五步应急处置指南
  • 基于放射性衰变的真随机数生成器:从量子物理到嵌入式实现
  • ‌2026智慧校园规划必读:如何在预算吃紧下选到高性价比方案‌