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

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

greenlet协程模块的使用


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


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


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




通过greenlet实现任务切换


导入模块:from greenlet import greenlet


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


下图代码逻辑:


代码执行到g1.switch()时转换到eat()函数中运行,当执行到g2.switch()时任务切换到study()函数中运行

09bcdce1b69a414798af767bf5557ce4.png




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在对应的时间也完成了耗时操作。


13a4524e64444717bdf58db31d53a24e.png

joinall()的使用

7933533a8196402799a656432aa8c6e7.png





程序打补丁


猴子补丁功能:拥有在模块运行时的替换能力


导入模块:from gevent import monkey


51abaea4433a47719f67284b6151a4ba.png



总结


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


2、对比


  • 进程:切换需要的资源较大,效率低


  • 线程:切换需要的资源一般,效率一般


  • 协程:切换需要的资源很小,效率高


  • 多线程适合IO密集型操作(读写数据操作多的,比如爬虫等)

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

相关文章
|
17天前
|
安全 大数据 程序员
Python operator模块的methodcaller:一行代码搞定对象方法调用的黑科技
`operator.methodcaller`是Python中处理对象方法调用的高效工具,替代冗长Lambda,提升代码可读性与性能。适用于数据过滤、排序、转换等场景,支持参数传递与链式调用,是函数式编程的隐藏利器。
64 4
|
11天前
|
存储 数据库 开发者
Python SQLite模块:轻量级数据库的实战指南
本文深入讲解Python内置sqlite3模块的实战应用,涵盖数据库连接、CRUD操作、事务管理、性能优化及高级特性,结合完整案例,助你快速掌握SQLite在小型项目中的高效使用,是Python开发者必备的轻量级数据库指南。
124 0
|
2月前
|
Go 调度 Python
Golang协程和Python协程用法上的那些“不一样”
本文对比了 Python 和 Go 语言中协程的区别,重点分析了调度机制和执行方式的不同。Go 的协程(goroutine)由运行时自动调度,启动后立即执行;而 Python 协程需通过 await 显式调度,依赖事件循环。文中通过代码示例展示了两种协程的实际运行效果。
118 7
|
19天前
|
数据采集 网络协议 API
协程+连接池:高并发Python爬虫的底层优化逻辑
协程+连接池:高并发Python爬虫的底层优化逻辑
|
2月前
|
传感器 数据采集 监控
Python生成器与迭代器:从内存优化到协程调度的深度实践
简介:本文深入解析Python迭代器与生成器的原理及应用,涵盖内存优化技巧、底层协议实现、生成器通信机制及异步编程场景。通过实例讲解如何高效处理大文件、构建数据流水线,并对比不同迭代方式的性能特点,助你编写低内存、高效率的Python代码。
126 0
|
2月前
|
存储 安全 数据处理
Python 内置模块 collections 详解
`collections` 是 Python 内置模块,提供多种高效数据类型,如 `namedtuple`、`deque`、`Counter` 等,帮助开发者优化数据处理流程,提升代码可读性与性能,适用于复杂数据结构管理与高效操作场景。
105 0
|
3月前
|
数据采集 监控 调度
干货分享“用 多线程 爬取数据”:单线程 + 协程的效率反超 3 倍,这才是 Python 异步的正确打开方式
在 Python 爬虫中,多线程因 GIL 和切换开销效率低下,而协程通过用户态调度实现高并发,大幅提升爬取效率。本文详解协程原理、实战对比多线程性能,并提供最佳实践,助你掌握异步爬虫核心技术。
|
3月前
|
数据安全/隐私保护 Python
抖音私信脚本app,协议私信群发工具,抖音python私信模块
这个实现包含三个主要模块:抖音私信核心功能类、辅助工具类和主程序入口。核心功能包括登录
|
Python
对Python中一些“坑”的总结及技巧
一.赋值即定义 1.运行以下代码会出现报错 #!/usr/bin/env python #_*_conding:utf-8_*_ x = 100 def outer(): def inner(): x += 100    #其实这里等效于"x = x + 100",我们直到这是一个赋值语句,会优先计算右边的等式,即"x + 100".而在此时由于x变量赋值即定义,即此时的x和全局作用域的x并非同一个对象。
800 0
|
19天前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
191 102

推荐镜像

更多