python gevent 启动http服务_python协程之三:协程目前最好的使用方式

本文深入探讨了Python协程的四种实现方式,包括asyncio、greenlet、gevent及其猴子补丁。强调了async/await语法的复杂性,greenlet的手动切换以及gevent的自动切换特性。通过实例展示了gevent猴子补丁如何实现完美协程切换,帮助读者理解Python协程的使用和优势。
摘要由CSDN通过智能技术生成

先接上篇说一下协程,四种方式

  • 第一、二种较少用(了解)
  • 第三种不太完美(必须知道)
  • 第四种完美(最佳使用方式)

一、用 async await 语法实现协程函数,用 asyncio 模块实现运行协程(复杂)。

注解:asyncio模块不在详细讲解了,因为有更好的运行协程的方式

为什么复杂呢?

1、async 可跟其他关键字:async 函数、async for、async with 等,这样写的话,会非常麻烦也不清楚什么时候用。

2、await 可跟可等待对象,实际上 python 有很多可等待对象,比如【await 协程对象】、【await task】【await Futrue】我们一个一个去记忆去理解太多了。

async await 实现协程并运行(少用)

f1b5b98ea58bbaef7690355ad1ae29a1.png

二、greenlet 把普通函数变为协程,阻塞自己判断手工进行切换(麻烦)

greenlet 是由 C 语言编写而成,让我们能用编写同步函数一样的方式编写函数或方法,但是各种IO等待时,需要我们自己来判断在哪里切换。

greenlet 实现协程并运行(少用)

3e4397730a80b9ee494725efa26bfdf3.png

三、gevent 把普通函数变为协程,遇到阻塞自动切换。(半完美)

现在最简便协程的使用方式是一个第三方的模块 gevent。 gevent 是由 grennlet 模块封装而来,实现的正常方式编写一般函数,遇到 部分阻塞 自动切换协程。IO类阻塞不加补丁不自动切换。

第三方模块我们得自己安装哦。

gevent 实现协程并运行(常用)

96291e33c56924843b3ee7f798e0fc37.png

四、gevent 加入猴子补丁(完美)

一个 gevent 并不能把所有 IO函数 都自动切换了,比如 requests模块、socket 等等

下面看两个 HTTP 请求的例子进行对比

不加猴子补丁无法识别到 IO 阻塞

462160194503a01151197d960e9a56cf.png

加入猴子补丁后,识别到 IO 阻塞

ea48b447b557b1f1d86e4088f8028427.png

小伙伴,通过三篇文章,你知道 python 协程如何使用了吗?

如果你想了解 python 协程 如何从基本 生成器演变来的,

请点击【python协程之一:程序、进程、线程、协程、同步、异步概念】

【python 协程之二:协程使用范围、由来及演变过程】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值