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网络编程学习笔记(九):数据库客户端 DB-API
Jun 09 Python
基于Python的身份证号码自动生成程序
Aug 15 Python
Python性能优化技巧
Mar 09 Python
python将ip地址转换成整数的方法
Mar 17 Python
python去除扩展名的实例讲解
Apr 23 Python
Python 二叉树的层序建立与三种遍历实现详解
Jul 29 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
Jupyter Notebook 文件默认目录的查看以及更改步骤
Apr 14 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
Apr 24 Python
python中os包的用法
Jun 01 Python
python爬虫scrapy基本使用超详细教程
Feb 20 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
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
7个超级实用的PHP代码片段
2011/07/11 PHP
php中的静态变量的基本用法
2014/03/20 PHP
用roll.js实现的图片自动滚动+鼠标触动的特效
2007/03/18 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
js html5 css俄罗斯方块游戏再现
2016/10/17 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
JS检测是否可以访问公网服务器功能代码
2017/06/19 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
node.js文件操作系统实例详解
2019/11/05 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
Python中关键字is与==的区别简述
2014/07/31 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
python3 配置logging日志类的操作
2020/04/08 Python
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
护理专业的自荐信
2013/10/22 职场文书
高中生的学习总结自我鉴定
2013/10/26 职场文书
党员党性分析材料
2014/02/17 职场文书
演讲稿开场白台词
2014/08/25 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
学期个人自我总结
2015/02/13 职场文书
礼貌问候语大全
2015/11/10 职场文书
MyBatis自定义SQL拦截器示例详解
2021/10/24 Java/Android
利用正则表达式匹配浮点型数据
2022/05/30 Java/Android