[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的几点思考》阅读笔记相关推荐

  1. trainer setup_Detectron2源码阅读笔记-(一)Configamp;Trainer

    一.代码结构概览 1.核心部分 configs:储存各种网络的yaml配置文件 datasets:存放数据集的地方 detectron2:运行代码的核心组件 tools:提供了运行代码的入口以及一切可 ...

  2. VoxelNet阅读笔记

    作者:Tom Hardy Date:2020-02-11 来源:VoxelNet阅读笔记

  3. Transformers包tokenizer.encode()方法源码阅读笔记

    Transformers包tokenizer.encode()方法源码阅读笔记_天才小呵呵的博客-CSDN博客_tokenizer.encode

  4. 源码阅读笔记 BiLSTM+CRF做NER任务 流程图

    源码阅读笔记 BiLSTM+CRF做NER任务(二) 源码地址:https://github.com/ZhixiuYe/NER-pytorch 本篇正式进入源码的阅读,按照流程顺序,一一解剖. 一.流 ...

  5. Mina源码阅读笔记(一)-整体解读

    2019独角兽企业重金招聘Python工程师标准>>> 今天的这一节,将从整体上对mina的源代码进行把握,网上已经有好多关于mina源码的阅读笔记,但好多都是列举了一下每个接口或者 ...

  6. “CoreCLR is now Open Source”阅读笔记

    英文原文:CoreCLR is now Open Source 阅读笔记如下: CoreCLR是.NET Core的执行引擎,功能包括GC(Garbage Collection), JIT(将CIL代 ...

  7. QCon 2015 阅读笔记 - 团队建设

    QCon 2015阅读笔记 QCon 2015 阅读笔记 - 移动开发最佳实践 QCon 2015 阅读笔记 - 团队建设 中西对话:团队管理的五项理论和实战 - 谢欣.董飞(今日头条,LinkedI ...

  8. 05《软件需求模式》阅读笔记

    剩下的两个阅读笔记写第二部分.各类需求模式,共八个领域和它的需求模式,这一次写前四个. 基础需求模式,它是所有种类的系统都可能需要的一些东西.系统间接口需求模式使用系统间接口需求模式定义被定义的系统和 ...

  9. [置顶] Linux协议栈代码阅读笔记(一)

    Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...

  10. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

最新文章

  1. 全球人工智能战略与政策观察(2019)
  2. Android镜像文件的拆解
  3. 皮一皮:童话里都是骗人的...
  4. 2020 年腾讯新增 20 亿行代码,鹅厂第一编程语言还是它
  5. 这个国家太奇怪了!全球最落后的国家之一,却又是世界上最幸福的国家!
  6. 10kv电压互感器型号_电气行业需要知道的10KV电压互感器基本技术参数
  7. AJAX简单使用介绍
  8. SQL Server 2005系列教学(9) SQL 存储过程
  9. 大众考虑投资中国汽车零部件供应商 潜在目标包括国轩高科
  10. [流媒体]Android 播放HLS/RTSP的原生类库 MediaPlayer
  11. 用CAD看图软件查找文字需要怎么做
  12. 波士顿房价预测python决策树_机器学习第二练---波士顿房价预测
  13. STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(二)---上位机搭建
  14. EventBus 3.0 事件公交车
  15. 【机器学习】横向联邦学习纵向联邦学习区别
  16. python in finance大作业及作答
  17. 域AD策略屏蔽USB驱动
  18. docsify-写一个自己的网站
  19. 今天教你快速查到英语原版书蓝思指数
  20. MYSQL人事工资管理系统--数据库表及表设计(一)

热门文章

  1. wxPython布局管理
  2. ipython notebook笔记(待续)
  3. 2014-2-28 思杨的语言能力
  4. 如何打造高性能Web应用
  5. 服务行为 之 并发与实例化
  6. python ttf svg path_SVG的path的使用
  7. lda主题词评论python_Python之酒店评论主题提取LDA主题模型
  8. 关于错误 1 error C4996: 'getch': The POSIX name for this item is deprecated.问题解决方式
  9. Tapestry框架概述
  10. Promise.allSettled