python eventlet绿化和patch原理


Posted in Python onNovember 21, 2020

说明

eventlet是一个必备工具,经常用,绿化原理有点忘记了,重新复习一遍.

三个主要问题 

1. 绿化的原理是什么?
2. 绿化怎么管理?
3. 绿化怎么引入?

绿化原理

利用select/epolls/kqueue等操作系统提供的非阻塞操作,将阻塞改为非阻塞.

引用管理 

eventlet在import之后,将模块中的属性绿化.
用一小段代码来查看看

import sys
import eventlet
# eventlet.monkey_patch()
 
httplib2 = eventlet.import_patched('httplib2')
print(httplib2)
print(httplib2.socket)
 
print("================")
for k,v in sys.modules.items():
  if "socket" in k:
    print(k, v)
 
 
# 打印内容
<module 'httplib2' from 'D:\\workspace\\venv\\xxx\\lib\\site-packages\\httplib2\\__init__.py'>
<module 'eventlet.green.socket' from 'D:\\workspace\\venv\\xxx\\lib\\site-packages\\eventlet\\green\\socket.py'>
================
_socket <module '_socket' from 'c:\\python\\python36\\DLLs\\_socket.pyd'>
socket <module 'socket' from 'c:\\python\\python36\\lib\\socket.py'>
__original_module_socket <module 'socket' from 'c:\\python\\python36\\lib\\socket.py'>
 
# 说明了什么?
绿化只是替换httplib2模块中的引用属性socket。并未改变sys.modules中的属性

引入绿化方法一:直接import

from eventlet.green import socket

引入绿化方法二:eventlet.import_patch 

1.好处: 能绿化模块内部的系统模块
2.只能绿化os, select, socket, thread, time, psycopy, MySQLdb, bultines, subprocess
3.如果是import threading,不会自动绿化, 需要from eventlet.green import threading

import eventlet
httplib2 = eventlet.import_patched('httplib2')
print(httplib2)
print(httplib2.socket)
 
# 打印
<module 'httplib2' from 'D:\\workspace\\venv\\autumn-secs\\lib\\site-packages\\httplib2\\__init__.py'>
<module 'eventlet.green.socket' from 'D:\\workspace\\venv\\autumn-secs\\lib\\site-packages\\eventlet\\green\\socket.py'>

引入绿化方法三:eventlet.monkey_patch

1.与import_patch不同,会直接修改sys.modules
2.但是也只能绿化os,select等等几个模块,其它模块需要用直接引用绿化

以上就是python eventlet绿化和patch原理的详细内容,更多关于python eventlet的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中使用smtplib和email模块发送邮件实例
Apr 22 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
Python代码缩进和测试模块示例详解
May 07 Python
详解python中的装饰器
Jul 10 Python
Python使用Selenium爬取淘宝异步加载的数据方法
Dec 17 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
Jun 17 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python3打包exe代码2种方法实例解析
Feb 17 Python
python实现输入三角形边长自动作图求面积案例
Apr 12 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 Python
python 实用工具状态机transitions
Nov 21 #Python
python 实现表情识别
Nov 21 #Python
python 实现性别识别
Nov 21 #Python
python遍历路径破解表单的示例
Nov 21 #Python
Python如何批量生成和调用变量
Nov 21 #Python
在终端启动Python时报错的解决方案
Nov 20 #Python
python 批量下载bilibili视频的gui程序
Nov 20 #Python
You might like
根德YB400的电路分析
2021/03/02 无线电
基于文本的搜索
2006/10/09 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
查找Oracle高消耗语句的方法
2014/03/22 Javascript
javascript对JSON数据排序的3个例子
2014/04/12 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
vue2单元测试环境搭建
2018/05/24 Javascript
Web安全之XSS攻击与防御小结
2018/12/13 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
[00:34]TI7不朽珍藏III——地穴编织者不朽展示
2017/07/15 DOTA
Python open读写文件实现脚本
2008/09/06 Python
Python格式化css文件的方法
2015/03/10 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
python简单获取数组元素个数的方法
2015/07/13 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
对python抓取需要登录网站数据的方法详解
2018/05/21 Python
Python子类继承父类构造函数详解
2019/02/19 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
十行代码使用Python写一个USB病毒
2019/06/21 Python
python web框架 django wsgi原理解析
2019/08/20 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Django继承自带user表并重写的例子
2019/11/18 Python
django框架两个使用模板实例
2019/12/11 Python
3种python调用其他脚本的方法
2020/01/06 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
django中ImageField的使用详解
2020/12/21 Python
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
银行营业厅大堂经理岗位职责
2014/01/06 职场文书
求职信的正确写法
2014/07/10 职场文书