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 判断自定义对象类型
Mar 21 Python
Python引用(import)文件夹下的py文件的方法
Aug 26 Python
python运行时间的几种方法
Jun 17 Python
Python列表切片用法示例
Apr 19 Python
windows下Virtualenvwrapper安装教程
Dec 13 Python
python遍历文件夹下所有excel文件
Jan 03 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Django 对象关系映射(ORM)源码详解
Aug 06 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
Keras使用tensorboard显示训练过程的实例
Feb 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
PHP获取MySql新增记录ID值的3种方法
2014/06/24 PHP
thinkphp学习笔记之多表查询
2014/07/28 PHP
php数组键值用法实例分析
2015/02/27 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
JavaScript中的私有成员
2006/09/18 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
jquery创建表格(自动增加表格)代码分享
2013/12/25 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
微信小程序 商城开发(ecshop )简单实例
2017/04/07 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
使用MUI框架模拟手机端的下拉刷新和上拉加载功能
2017/09/04 Javascript
JS实现颜色的10进制转化成rgba格式的方法
2017/09/04 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
javascript History对象原理解析
2020/02/17 Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
2020/03/10 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
Python中input与raw_input 之间的比较
2017/08/20 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
Sql面试题
2013/03/20 面试题
UNIX特点都有哪些
2016/04/05 面试题
邀请书模板
2015/02/02 职场文书
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
分享3个非常实用的 Python 模块
2022/03/03 Python