专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

python协程概念

什么是协程

协程是单线程下的并发,又称微线程,纤程。它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。英文名Coroutine。一句话说明什么是协程:在一个线程中的某个函数中,我们可以在任何地方保存当前函数的一些临时变量等信息,然后切换到另外一个函数中执行,注意不是通过调用函数的方式做到的 ,并且切换的次数以及什么时候再切换到原来的函数都由开发者自己确定。

线程和协程的区别:

线程的切换是一个cpu在不同线程中来回切换,是从系统层面来,不止保存和恢复CPU上下文这么简单,会非常耗费性能。但是协程只是在同一个线程内来回切换不同的函数,只是简单的操作CPU的上下文,所以耗费的性能会大大减少。
需要强调的是:

1、 python的线程属于内核级别的,即由操作系统控制调度(如单线程遇到io或执行时间过长就会被迫交出cpu执行权限,切换至其他线程运行)
2、 单线程内开启协程,一旦遇到io,就会从应用程序级别(而非操作系统)控制切换,以此来提升效率(!!!非io操作的切换与效率无关)
对比操作系统控制线程的切换,用户在单线程内空盒子协程的切换有以下优缺点:
优点:
3、 协程的切换开销更小,属于程序级别的切换,操作系统完全感受不到,因而更加轻量级
4、 单线程内就可以实现并发的效果,最大限度地利用cpu
缺点:
5、 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程
6、 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程

python协程模块-Gevent使用

Gevent是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet。示例如下:

import gevent
g1 = gevent.spawn(func,1,2,3,x=4,y=5)func后都是参数
g2 = gevent.spawn(func2)
g1.join() #等待g1结束
g2.join() #或者上述两步合作一步:
gevent.joinall([g1,g2])
g1.value #拿到func1的返回值

文章永久链接:https://tech.souyunku.com/21859

未经允许不得转载:搜云库技术团队 » python协程概念

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们