《关于gevent的几点思考》阅读笔记
[1]写得很好,所以打算自己消化一下,增加一些自己的理解。(下面斜体表示原文引用)
1. greenlet/eventlet/gevent的关系
只要学gevent就行,其他扔掉
2. gevent猴子补丁
猴子补丁monkey_patch,将标准库中大部分的阻塞式调用替换成非阻塞的方式,包括socket、ssl、threading、select、httplib等。通过monkey.patch_xxx()来打补丁。按照gevent文档中的建议,应该将猴子补丁的代码尽可能早的被调用,这样可以避免一些奇怪的异常。
我是这样理解的,gevent实现了协程的创建、切换和调度,本身是同步的,而猴子补丁将gevent调用的阻塞库变成非阻塞的,两者配合实现了高性能的协程。
3、4、6. 一张表格概括:
功能 | 是否加入gevent | 是否阻塞(IO异步) |
time.sleep | 加入mokey.patch_all() | 阻塞 |
time.sleep | 加入mokey.patch_all() | 非阻塞 |
os.popen/os.system | 不加入mokey.patch_all() | 阻塞 |
os.popen/os.system | 加入mokey.patch_all() | 非阻塞 |
subprocess.call | 不加入mokey.patch_all() | 阻塞 |
subprocess.call | 加入mokey.patch_all() | 非阻塞 |
subprocess.Popen | 不加入mokey.patch_all() | 阻塞 |
subprocess.Popen | 加入mokey.patch_all() | 非阻塞 |
redis | 不加入mokey.patch_all() | 阻塞 |
redis | 加入mokey.patch_all() | 非阻塞 |
mysql | 加入与不加入mokey.patch_all() | 都是阻塞 |
gevent文件IO | 加入与不加入mokey.patch_all() | 都是阻塞 |
monkey.patch_all将socket变成非阻塞
凡是阻塞的顺序都是gevent.spawn来决定的
5. gevent和timeout
看到有文章说,gevent里使用timeout会失效,因为已经是非阻塞的了。
经过验证,上面的说法是错误的。无论使用urllib2,requests库,timeout设置都有效。
另外,gevent里有个Timeout对象,可以很方便的实现非阻塞式的超时控制
Reference:
[1]关于gevent的几点思考
《关于gevent的几点思考》阅读笔记相关推荐
- trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer
一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...
- VoxelNet阅读笔记
作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记
- Transformers包tokenizer.encode()方法源码阅读笔记
Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode
- 源码阅读笔记 BiLSTM+CRF做NER任务 流程图
源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...
- Mina源码阅读笔记(一)-整体解读
2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...
- “CoreCLR is now Open Source”阅读笔记
英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...
- QCon 2015 阅读笔记 - 团队建设
QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...
- 05《软件需求模式》阅读笔记
剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...
- 大型网站技术架构:核心原理与案例分析阅读笔记二
大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...
最新文章
- 全球人工智能战略与政策观察(2019)
- Android镜像文件的拆解
- 皮一皮:童话里都是骗人的...
- 2020 年腾讯新增 20 亿行代码,鹅厂第一编程语言还是它
- 这个国家太奇怪了!全球最落后的国家之一,却又是世界上最幸福的国家!
- 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
- AJAX简单使用介绍
- SQL Server 2005系列教学(9) SQL 存储过程
- 大众考虑投资中国汽车零部件供应商 潜在目标包括国轩高科
- [流媒体]Android 播放HLS/RTSP的原生类库 MediaPlayer
- 用CAD看图软件查找文字需要怎么做
- 波士顿房价预测python决策树_机器学习第二练---波士顿房价预测
- STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建
- EventBus 3.0 事件公交车
- 【机器学习】横向联邦学习纵向联邦学习区别
- python in finance大作业及作答
- 域AD策略屏蔽USB驱动
- docsify-写一个自己的网站
- 今天教你快速查到英语原版书蓝思指数
- MYSQL人事工资管理系统--数据库表及表设计(一)
热门文章
- wxPython布局管理
- ipython notebook笔记(待续)
- 2014-2-28 思杨的语言能力
- 如何打造高性能Web应用
- 服务行为 之 并发与实例化
- python ttf svg path_SVG的path的使用
- lda主题词评论python_Python之酒店评论主题提取LDA主题模型
- 关于错误	1	error C4996: 'getch': The POSIX name for this item is deprecated.问题解决方式
- Tapestry框架概述
- Promise.allSettled