Python并发Gevent库(一)
The real power of gevent comes when we use it for network and IO bound functions which can be cooperatively scheduled.
上面这句话是Python并发的一个库Gevent
开始时谈到的
之前也曾有幸看过一个清华大佬的文章(不记得地址了), 稍微有点理解了Python本身的多线程其实任然不是真正的多线程
。 所以一般看到只会在跟网络连接以及有IO操作的时候才会显现出现来。在查看这个Gevent库的时候意外看到这个句话,忍不住就想写下关于这个的小记录。
据说Gevent只是协程~
,根据我个人的理解,协程本质上就是在程序维度上的 线程。用了这个,就可以保证对于当前线程来说,只要加入到一个协程组(抽象来理解好说明
)。那么在这一个组内,只要发现有一个停了(比如IO, 或者等待网路的情况),那么就可以交出控制权,让别的函数在这个时间进行。通过这样的调度,就可以使得整个程序运行的速度加快。- 交换控制权的方法也比价容易,gevent.sleep()这个函数就实现了关于控制权交换的问题。
- 由于Python的线程使用起来本质上还是一个线程。甚至于由于其他的设计,还会导致时间更慢。(这个有点像经济学中的
菜单成本
)。既然用多线程不太现实了(除非你要IO)。那不如就直接用协程
, 而且协程
更为轻量级,怎么说,在Python中使用线程都不如使用协程
。(这个是我自己的观点,不过还有很多很多的不同,如果各位大大有很不同意见,欢迎在评论区指出,不甚感激!)
这个库使用起来也是特别方便的
也不敢造次,就用官方来做解释吧
import geventdef foo():print('Running in foo')gevent.sleep(0)print('Explicit context switch to foo again')def bar():print('Explicit context to bar')gevent.sleep(0)print('Implicit context switch back to bar')gevent.joinall([gevent.spawn(foo),gevent.spawn(bar),
])
输出结果是:
Running in foo
Explicit context to bar
Explicit context switch to foo again
Implicit context switch back to bar
先用spawn来封装一下这个函数类。接着再用joinall将所有给拼接起来~
语言只是实现上的不同,逻辑都是还类似的。在C/C++中这个入门比较好,再写这个也比较轻松了~
Python并发Gevent库(一)相关推荐
- python内置库有哪些_python 内置库
广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! version: 0. 2.0, configurations: }, de ...
- Python Gevent – 高性能的 Python 并发框架
From:http://www.xuebuyuan.com/1604603.html Gevent 指南(英文):http://sdiehl.github.io/gevent-tutorial Gev ...
- Python的gevent协程及协程概念
https://www.cnblogs.com/tkqasn/p/5705338.html 何为协程 协程,又称微线程.英文名Coroutine. 协程最大的优势就是协程极高的执行效率.因为子程序切换 ...
- python之gevent模块实现协程
Python通过yield提供了对协程的基本支持,但是不完全.而第三方的gevent为Python提供了比较完善的协程支持. gevent是第三方库,通过greenlet实现协程,其基本思想是: 当一 ...
- Python自动化测试常用库整理
参考:https://www.jianshu.com/p/b45d240eabac 今天花了一些时间,过了一下这几年自己用Python开发的自动化测试框架,然后将其中常用到Python库抽出来,简单整 ...
- 终于把python的所有库整理完毕了,现在一篇python库的字典诞生了
库名称简介 添加小编学习群 832339352 即可自动获取大量python视频教程以及各类PDF! Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文 ...
- python的第三方库汇总
Python 资源大全中文版 环境管理 管理 Python 版本和环境的工具 p:非常简单的交互式 python 版本管理工具.官网 pyenv:简单的 Python 版本管理工具.官网 Vex:可以 ...
- python web 常用库
# Python 资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.[awesome-python](https://github.com/v ...
- 500个Python模块(库)的详细分类介绍
常用模块 Chardet-------------字符编码探测器,可以自动检测文本.网页.xml的编码.colorama------------主要用来给文本添加各种颜色,并且非常简单易用.Prett ...
最新文章
- 计算机原理与基础 —— 进制之间的转换(二进制与十、八、十六禁止之间的转换)
- TextView 显示图像+文字的方法
- linux中使用xshell远程连接
- 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc
- IOS15一个工作空间创建多个项目
- Android 虚拟机与真机调试配置
- 火了!杭州程序员自编“购房宝典”,点击超40万,业内人士惊呆
- MyEclipse 使用文档
- 【图像分割】基于matlab超像素SFFCM图像分割【含Matlab源码 1374期】
- 新手购买单反终极攻略--谈谈现场验机的要领与要点
- bibibi 下载_哔哩哔哩下载电脑版_哔哩哔哩官方版下载[bilibili]-下载之家
- 自定义OrderedMap
- word中取消链接上一节在哪_在WORD中怎样取消与上一节相同
- android app启动动画效果,Android 启动页优化及过渡动画
- php判断是否是全英文,php判断字符串是否全英文,纯中文,中英文组合的方法
- VUE二级/多级路由配置方式(嵌套路由)
- 百度输入法android+4.8,百度输入法Android v7.6来了 翻译功能上线助力跨国沟通
- JAVA疫情数据项目(JAVA课程设计)
- Unity使用FBX Exporter导入导出动画及FBX
- 零基础从微软官网制作纯净的U盘启动盘
热门文章
- 事件绑定及解除事件绑定
- 一步一步学ROP之gadgets和2free篇
- Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
- weblogic管理2 - 创建并启动一个managed server
- 京东自建数据中心核心技术解密——运营管理篇
- 巧用linux云服务器下的的/dev/shm/,避开磁盘IO不给力!
- CHIL-SQL-FIRST() 函数
- [Linux]history 显示命令执行的时间
- android 布局权重问题(最近布局经常坑爹)
- Redis常用命令集