python 协程之yield
协程,又叫微线程或者纤程。它是比线程更为细小的线程,微线程的名字由此得来。只支持python 3.4以上的版本,不过建议使用python 3.6版本.
优点:
-
使用高并发、高扩展、低性能的;一个CPU支持上万的协程都不是问题。所以很适合用于高并发处理
-
无需上下文的切换开销
缺点:
-
无法利用计算机多核优势
一般情况下,实现协程并发有三种方式
-
yield(简单协程)
-
asyncio(Python自带)
-
greenlet(第三方库)
-
gevent(第三方库)
学过Python基础的朋友们都知道,函数的返回值有两种方式,一种是最常用的return
,还有一种是yeild
,虽然它是起到挂起的作用,但是依旧能返回值。
基本思路就是创建生成器然后获取生成器并执行:
这就是最为简单的协程的实现,异步IO的实现
import time def func1(): while True: print('正在执行:func1') yield time.sleep(2) def func2(): while True: print('正在执行:func2') yield time.sleep(2) if __name__ == '__main__': for i in range(5): next(func1()) next(func2())
在不开启线程的基础上,实现多个任务,协程是一个特殊的生成器
实现过程:
-
func1 生成器
-
func2 生成器
-
获取生成器
-
运行生成器
带yield的函数是一个生成器,而不是一个函数了,生成器有一个next函数,next相当于'下一步',这一次的next开始的地方就是接着上一次next停止的地方执行,所以调用next的时候,并不会从fun函数执行,只是接着上一次停止的地方开始。
【推荐】国内首个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保姆级教程