【Python零基础入门篇 · 36】:greenlet协程模块的使用、gevent模块的使用、程序打补丁、总结

python2.7 window64下安装greenlet 1.下载地址:  https://pypi.org/project/greenlet/#files 2.下载完成 文件名为greenlet-0.4.15-cp27-cp27m-win_amd64.whl 3.解压后有两个文件,一个greenlet.pyd 4.剪切到C:\Python27\Lib\site-packages 5.运行OK 1,2   3   4 5,... 阅读详情

greenlet协程模块的使用


greenlet:是一个用C实现的协程模块,通过switch()来实现任务函数间的切换。

greenlet属于手动切换任务,当遇到IO操作,程序会阻塞,而不能进行自动切换。

greenlet为第三方库模块,需要在Terminal中输入下载命令:pip install greenlet

通过greenlet实现任务切换

导入模块:from greenlet import greenlet

实例化协程对象:greenlet(任务名)

下图代码逻辑:

  • 代码执行到g1.switch()时转换到eat()函数中运行,当执行到g2.switch()时任务切换到study()函数中运行
    在这里插入图片描述

gevent模块的使用


原理是当一个greenlet遇到IO(指的是input output 输入输出,比如网络、文件操作等)操作时,比如访问网络,就自动切换到其他的greenlet,等到IO操作完成,再在适当的时候切换回来继续执行。 由于IO操作非常耗时,经常使程序处于等待状态,有了gevent为我们自动切换协程,就保证总有greenlet在运行,而不是等待IO。

gevent遇到IO操作,会进行自动切换,属于主动式切换。在gevent中用到的主要模式是greenlet

grevent的使用

gevent.spawn(函数名)——创建协程对象
join()——阻塞,等待某个协程执行完毕
joinall(参数)——参数是一个协程对象列表,会等待所有的协程都执行完毕再退出

gevent模块中自带了sleep耗时函数

  • 执行A/B两个任务,当A、B遇到耗时操作,gevent会让A继续执行,同时也开始执行B任务。

  • A完成了耗时操作后,B在对应的时间也完成了耗时操作。
    在这里插入图片描述

joinall()的使用

在这里插入图片描述

程序打补丁


猴子补丁功能:拥有在模块运行时的替换能力
导入模块:from gevent import monkey
在这里插入图片描述

总结


1、进程是资源分配的基本单位,线程是CPU调度的基本单位。

2、对比

  • 进程:切换需要的资源较大,效率低
  • 线程:切换需要的资源一般,效率一般
  • 协程:切换需要的资源很小,效率高
  • 多线程适合IO密集型操作(读写数据操作多的,比如爬虫等)

多进程适合CPU密集型操作(科学计算、对视频进行高清解码等)

数据库迁移策略实战:MySQL到PostgreSQL 数据库迁移是一项复杂且细致的任务,需要充分的准备工作、合适的迁移策略和严格的验证与优化步骤。通过选择合适的迁移工具、进行手动迁移和应用程序适配、以及迁移后的验证与优化,可以确保数据迁移的成功和业务的连续性。希望本文的分享能够为大家在MySQL到PostgreSQL的数据库迁移实战中提供一些有用的参考和启示。 阅读详情

相关推荐

Kettle入门指南:从安装到数据转换实战

本文提供Kettle(Pentaho Data Integration)的完整入门指南,涵盖从Java环境安装、软件配置到核心概念(转换与作业)的详细解析。通过实战案例,手把手教你如何将文本文件数据导出到Excel,并连接MySQL数据库进行数据导入,帮助你快速掌握这一强大ETL工具的基本使用,实现高效数据搬运与转换。

weixin_29266647的博客 448

Python协程-greenlet模块教程

Python协程-greenlet模块教程

Python热爱者的博客 978

nrf52840的uart0与uart1双串口使用

nrf52840的uart0与uart1双串口使用 项目原使用nrf52832,后面由于项目需要用到双串口,改用nrf52840,官方的例程没看到使用uart1的,找遍全网都没找到uart1的使用资料,有些不负责任的网文居然说40也只有一个uart,吓得俺赶紧又查看了一次datesheet,O得K、木鸭梨 SDK代码uart驱动中,搜索到uart1的驱动部分,说明官方驱动有uart1支持的 自己动手,丰衣足食吧,下面以nRF5_SDK_17.0.0_9d13099版本,在examples\ble_per

chhen168的博客 5625

switch函数——Gevent源码分析

在gevent的源码中,经常能看到switch函数。而不同的类中的switch函数有不同的用法 1. greenlet的switch函数 这里面的greenlet是greenlet库中的greenlet类,它是gevent中的Greenlet类的基类(即Greenlet类是在greenlet类的基础之上的扩展) 在这个基类里面,它的switch函数的作用是:==切换到这个greenlet协程中,并...

weixin_33893473的博客 215

七步设计高频变压器

七步设计高频变压器

m0_71394959的博客 5400

基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)

基于STM32F103C8T6的循迹避障小车完整制作过程 由于本人的一个小项目,要做一个基于STM32的循迹避障小车,前后花了约1周的时间,这个过程种也参考了很多大神分享的资料,学到很多的东西。但是资料都比较分散,有些东西也不好找,在这里就想把自己制作小车的一个整体过程记录分享一下,希望能够帮到你。 我自己也算是一个小白,之前有做过 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎...

weixin_43924857的博客 14万+

greenlet的使用

了解greenlet 概念 greenlet是python的一个C拓展,旨在提供可自行调度的“微线程”,即协程 generator实现的协程在yield value时只能将value返回给调用者;而在greenlet中,target.switch(value)可以切换到指定的协程(target),然后yield value。greenlet用switch来表示协程的切换,从一个协程切换到另一个协程...

Candance_star的博客 322

保姆级避坑指南:在Ubuntu 18.04上搞定速腾Helios雷达驱动与fast-LIO2的完整配置流程

本文提供了一份详细的速腾Helios雷达与fast-LIO2在Ubuntu 18.04上的配置避坑指南,涵盖驱动安装、数据格式转换到建图全流程。特别针对常见编译错误和数据转换问题提供了解决方案,帮助开发者高效完成环境搭建与建图任务。

weixin_27252001的博客 112

greenlet switch原理猜测

其实说是greenlet之间跳转执行,根本时

xuriwuyun的专栏 1428

这20个网络工程项目经验,帮我跳槽加薪不止一次

嘿,大家好,我是圈圈,一个在网络工程圈子里混了十多年的老鸟。从国企的网管起步,到现在给大厂做顾问,我见过太多简历:有的光鲜亮丽,证书一堆,但一聊项目,就露怯;有的简历朴实,但列出的项目经验让人眼前一亮,直接拿offer。为什么?因为招聘官最看重实战。理论谁都会背,项目经验才是你的“硬通货”。尤其在网络工程这行,项目不光证明你的技能,还展示你解决问题的能力。今天,我就分享20个我亲身经历或见过的网络工程项目经验。每个都值得写进简历,不是吹牛,这些项目帮我跳槽加薪不止一次。

网络技术联盟站 431

【Unity实战篇】| 游戏轮播图效果,多种实现思路及完整教程

在众多游戏的主界面、商城、图鉴或关卡选择界面中,我们常常能看到轮播图的身影。 它以动态、直观的方式展示游戏角色、皮肤、成就或场景,不仅极大地提升了界面的美观度和交互性,还能高效地引导玩家聚焦于核心内容。 本篇文章将从零开始,一步步在Unity中构建一个功能完备、性能优良的游戏轮播图。 使用UGUI系统,通过代码驱动,实现包括自动轮播、手动拖拽、分页指示器、无限循环等核心功能。 无论是UI新手还是希望优化现有方案的开发者,这篇文章都将为你提供清晰的思路和完整的解决方案。

努力前行,总会成为自己心中的那道光 4万+

python下协程实现原理与greenlet源码解析

对main task的初始化与task的初始化不同,初始化main task不用设置run属性 (grennlet的callback函数),稍后介绍普通task的初始化时会提到run属 性.maintask对greenlet框架的使用者是透明的,在import greenlet时会执行初 始化操作,每个线程都可以有自己的main task,它的stack_stop属性永远 为-1, stask_start属性永远为1。

weixin_60223182的博客 777

第三天:Python基础语法详解

Python代码规范与注释最佳实践 摘要: 本文深度解析Python缩进规则与代码结构的技术规范,包括缩进的底层原理、语法规则和错误处理。详细阐述Python注释系统,涵盖行内注释、文档字符串和类型注释等多种形式,并提供工业级代码组织方案。研究显示,良好的缩进可提升40%的代码识别速度,降低50%的认知负荷。文章还对比了Sphinx、pdoc等主流文档生成工具,给出企业级项目中的注释编写原则和模板建议,帮助开发者构建更可维护的Python代码。

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1009

python-day35(协程,IO多路复用)

一. 协程   协程: 是单线程下的并发,又称微线程,纤程,英文名Coroutine.   并发: 切换+保存状态     协程是一种用户态的轻量级线程,即协程是由用户程序自己控制调度的   协程特点:     1. 必须在只有一个单线程里实现并发     2. 修改共享数据不需要加锁     3. 用户程序自己保存多个控制流的上线文栈     4. 一个协程遇到IO操...

banaoxue9848的博客 239

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

day36 python学习gevent io 多路复用 socketserver *****

---恢复内容开始--- gevent 1、切换+保存状态 2、检测单线程下任务的IO,实现遇到IO自动切换 Gevent 是一个第三方库,可以轻松通过gevent实现并发同步或异步编程,在gevent中用到的主要模式是Greenlet, 它是以C扩展模块形式接入Python的轻量级协程。 Greenlet全部运行在主程序操作系统进程的内部,但它们被协作式地调度。 ...

weixin_30807677的博客 224

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python标准库、threading、multiprocessing、aiomultiprocess、进程/线程 同步、queue(队列)

multiprocessing 包提供了本地和远程并发操作,通过使用子进程而非线程有效地绕过了全局解释器锁。 因此,multiprocessing 模块允许程序员充分利用给定机器上的多个处理器。

freeking101的博客 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Python协程技术:从Greenlet到async/await的异步编程探索

本篇博客深入讨论了Python中的协程技术,以及使用不同工具和语法实现协程的方法。首先,我们介绍了Greenlet和yield,解释了协程的基本概念和原理,并展示了手动切换上下文以实现协程交替执行的案例。接下来,我们引入了Python标准库的asyncio模块,展示了如何使用其中的协程和事件循环来实现并发和异步操作。最后,我们探讨了Python 3.5版本引入的async/await关键字,展示了如何使用它们来定义和调度协程,以实现简洁高效的异步编程。

ak_bingbing的博客 646

【专题】python中的协程库—greenlet和gevent

Python 的协程库 greenlet 和 gevent

qq_36581961的博客 1069

gevent- monkey 补丁

阅读上面的博客,就可以理解的作用,就是自动将socket、time等标准库替换成异步的库,是gevent让代码从同步变成异步的一种方式现在来一段上面博客的代码如果没有引入 gevent.monkey,代码是同步执行的,gevent没有检测到 io 操作,于是不会在io等待期间,执行其他协程task。

qq_21319187的博客 694

python协程入门(greenlet)

基本上greenlet的大体的东西都看的差不多了,看代码好久没有这么费劲过了,

fjs的专栏 2744

python中的greenlet

1.greenlet定义: gevent中使用的主要模式是greenlet,它是一个轻量级协程,作为C扩展模块提供给python, greenlet都是在主程序的操作系统进程内部运行,但都是协同调度的 在任何给定的时间内,只有一个greenlet在运行 2.并发的概念: 并发是指两个或多个事件在同一时间间隔发生 并发性的核心思想是将...

u011089760的博客 2840

python并发编程:协程、Greenlet、Gevent

cpu正在运行一个任务,会在两种情况下切走去执行其他的任务(切换由操作系统强制控制),一种情况是该任务发生了阻塞,另外一种情况是该任务计算的时间过长或有一个优先级更高的程序替代了它 提及进程的三种执行状态,而线程才是执行单位,所以也可以将上图理解为线程的三种状态 一:其中第二种情况并不能提升效率,只是为了让cpu能够雨露均沾,实现看起来所有任务都被“同时”执行的效果,如果多个任务都是纯计算的,这...

错位的梦寐的博客 779

协程

协程协程1、greenlet+switch2、gevent3、gevent + monkey 协程 1、greenlet+switch 采用greenlet+switch机制来实现协程 greenlet用于创建协程,switch进行协程之间的切换 某个协程在执行的过程中可以随时被其他协程通过switch来打断,转而去执行其他协程,当前的中 现场会被保留,一旦中断的协程再次获得cpu会恢复现场然后从中断处继续执行 这种机制下的协程是串行的,不能并发 举些例子说明一下 采用greenlet+switch机制来实

沉觞的博客 238

Python语法进阶:协程操作与Greenlet使用详解

协程是Python中一种强大的并发编程方式,它允许函数在执行过程中暂停和恢复,从而提高了程序的响应性和效率。Greenlet是一个轻量级的协程库,它提供了比Python原生协程更底层的控制。虽然使用Greenlet需要开发者手动管理协程的切换和同步,但它也提供了更灵活的控制方式。在实际开发中,Python的asyncawait机制已经足够强大和易用,因此大多数情况下我们不需要直接使用Greenlet。然而,在某些特殊情况下(如需要更精细的控制或优化性能),Greenlet仍然是一个值得考虑的选择。

2301_79727522的博客 962

playwright执行报错No module named “greenlet._greenlet“

greenlet._greenlet

weixin_44447793的博客 2360

python安装gevent和greenlet包:

两种方式: 1.通过官网下载压缩包 参考:https://blog.csdn.net/aineko520/article/details/89223047 2.通过PyCharm安装: (1)选中File,点击Settings (2)添加包,点击+号 (3)搜索需要添加的包,gevent和greenlet (4)等待下载完成了。下面就可以进行使用了 ...

S15031618的博客 2582
上一篇: 【Python零基础入门篇 · 35】:协程和IO操作的简单理解
下一篇: 【Python零基础入门篇 · 37】:正则基础
街 三 仔
街 三 仔 新星创作者: python技术领域 新星创作者: python技术领域 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄5年 1万+粉丝 338原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值