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函数执行,只是接着上一次停止的地方开始。

posted @   瘦阿瘦  阅读(588)  评论(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保姆级教程
点击右上角即可分享
微信分享提示