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

python进程和线程(三、主要讲解协程)

一、协程是什么

 
协程(Coroutine) 是一种用户态、轻量级、可暂停 / 可恢复的函数,由程序主动调度(协作式),而非操作系统抢占式调度。
  • 进程:资源分配单位,开销最大。
  • 线程:CPU 调度单位,内核抢占,开销中等。
  • 协程:用户态协作,单线程内并发,开销极小(KB 级栈)。
 
核心优势
  • 高并发:单机可跑数十万协程(线程 / 进程仅数千)。
  • 低开销:切换仅保存 / 恢复栈帧,无内核态切换
  • 易控:主动 await 让出 CPU,无线程安全问题

重点:协程不是计算机提供的,是由程序员人为创建的。协程也被秒杀为微线程, 是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。

二、python实现协程的几种方式

在 Python 中,实现协程主要有以下几种方式,它们代表了 Python 异步编程的发展历程。

🧬 1. greenlet 库

greenlet 是一个第三方库,它提供了一种轻量级的协程实现,允许你在不同的“绿色线程”之间手动切换执行。它并非 Python 原生的异步编程方式,而是一种协作式的多任务处理。
  • 特点:需要手动调用 switch() 方法来控制协程的切换。
  • 使用:首先需要安装 pip install greenlet
from greenlet import greenletdef func1():print(1)gr2.switch()  # 切换到 gr2print(2)def func2():print(3)gr1.switch()  # 切换到 gr1print(4)gr1 = greenlet(func1)
gr2 = greenlet(func2)gr1.switch()  # 启动 gr1

目前在pycharm中安装greenlet库没有成功。

🔄 2. yield 关键字 (生成器)

在 async/await 语法出现之前,Python 的生成器(generator)被用来实现协程的效果。通过 yield 关键字,函数可以暂停执行并保存当前状态,等待下一次被唤醒。
  • 特点:利用生成器的暂停和恢复能力,是早期实现协程的一种方式。
def func1():yield 1yield from func2()yield 2def func2():yield 3yield 4f1 = func1()
for item in f1:print(item) # 输出: 1, 3, 4, 2

image

⏳ 3. asyncio 装饰器 (Python 3.4+)

Python 3.4 引入了标准库 asyncio,并使用 @asyncio.coroutine 装饰器来声明一个协程函数。这种方式结合了生成器的 yield from 语法来处理异步操作。
  • 特点:这是 Python 官方对异步编程的早期支持,但语法相对繁琐,现已不推荐使用。
  • 注意:在 Python 3.8 之后的版本中,@asyncio.coroutine 装饰器和 yield from 语法已被弃用。

 

http://www.jsqmd.com/news/731727/

相关文章:

  • MusicPlayer2完全配置手册:3个核心功能让你的Windows音乐管理更高效
  • 通过用量看板直观观测各模型API的调用成本与消耗分布
  • BepInEx终极指南:如何快速为Unity游戏安装插件框架
  • 2025届毕业生推荐的十大降AI率工具推荐
  • 2026年3月箱包库存尾货厂商推荐,登机箱/外贸箱包/箱包定制/行李箱/拉链箱/箱包库存,箱包库存尾货企业哪家权威 - 品牌推荐师
  • 2026年如何确保论文低AIGC率?这4款AI工具必备! - 降AI实验室
  • 搞定了加密货币api 历史K线数据缺失的问题
  • 八大网盘直链解析终极指南:告别限速,开启高效下载新时代
  • 告别Xshell!手把手教你用WindTerm和MobaXterm搞定SSH连接(附详细配置对比)
  • 蓝桥杯单片机备赛:手把手教你用Keil5和官方onewire.c驱动DS18B20(附完整代码)
  • 5分钟彻底优化Windows系统:免费开源工具Win11Debloat完全指南
  • 2025届毕业生推荐的降AI率神器横评
  • 告别网盘客户端!用Mountain Duck把OneDrive、Google Drive都变成电脑本地硬盘(附保姆级配置教程)
  • STL中vector和string容器
  • 行业洞察:输送设备技术演进与市场格局5问
  • 如何快速配置智能象棋助手:3步实现深度学习AI棋局分析
  • 智能仓储物流系统哪家好?2026汽车线束自动化生产线厂家推荐全覆盖 - 栗子测评
  • 2026届学术党必备的五大AI学术网站推荐榜单
  • 解决老旧Mac系统兼容性难题:OpenCore Legacy Patcher技术深度解析与实践指南
  • 《眼中有星光的人》MV“五一”暖心上线:陈思思用歌声致敬每一位平凡追梦人
  • OpenClaw 2026 本地部署指南:从环境准备到一键安装(Windows)
  • 从‘It is a nice day’到[1, 739, 338...]:图解HuggingFace Tokenizer在Vicuna-7B模型中的完整工作流
  • 避开蓝桥杯嵌入式环境那些坑:从CubeMX配置到Keil工程移植的保姆级避雷指南
  • CompressO:完全免费的跨平台视频图像压缩神器,释放你的存储空间
  • 嵌入式Linux下SPI转4串口芯片WK2124驱动移植避坑指南(基于Firefly-RK3399实测)
  • 用逻辑分析仪和8051单片机,我手搓了一个能抗干扰的RF-315/433MHz通用解码库
  • 原生高防与云盾防护怎么选?中小企业低成本安全落地全攻略
  • 内容创作团队借助Taotoken多模型能力辅助选题与文案生成
  • 从“请鞭笞我吧,公瑾!”到“龙年七夕”:三国杀移动版吴国武将台词背后的文化彩蛋与版本变迁
  • 你的ECU重启安全吗?深入UDS 11服务的NRC(否定响应码)排查指南与避坑清单