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中的URLError异常的方法
Apr 30 Python
Python的Bottle框架中实现最基本的get和post的方法的教程
Apr 30 Python
python 异常处理总结
Oct 18 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
Python自定义简单图轴简单实例
Jan 08 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
详解Python字符串切片
May 20 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
基于nexus3配置Python仓库过程详解
Jun 15 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
Feb 06 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
Python Matplotlib库实现画局部图
Nov 17 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
Banner程序
2006/10/09 PHP
PHP SFTP实现上传下载功能
2017/07/26 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
发一个自己用JS写的实用看图工具实现代码
2008/07/26 Javascript
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
javascript 函数及作用域总结介绍
2013/11/12 Javascript
类似php的js数组的in_array函数自定义方法
2013/12/27 Javascript
JS获取地址栏参数的几种方法小结
2014/02/28 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
jQuery网页定位导航特效实现方法
2016/12/19 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
详解Vue中过度动画效果应用
2017/05/25 Javascript
React Native 集成jpush-react-native的示例代码
2017/08/16 Javascript
layui select动态添加option的实例
2018/03/07 Javascript
seajs下require书写约定实例分析
2018/05/16 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
对Python 语音识别框架详解
2018/12/24 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
Python eval函数介绍及用法
2020/11/09 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
《猫》教学反思
2014/02/26 职场文书
运动会致辞稿
2015/07/29 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
MySQL连表查询分组去重的实现示例
2021/07/01 MySQL