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中的赋值和深浅拷贝
Aug 15 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
tensorflow实现简单的卷积网络
May 24 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
Python理解递归的方法总结
Jan 28 Python
详解Python中的测试工具
Jun 09 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
Python面向对象之继承原理与用法案例分析
Dec 31 Python
conda安装tensorflow和conda常用命令小结
Feb 20 Python
Pytorch 如何实现LSTM时间序列预测
May 17 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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
apache rewrite_module模块使用教程
2008/01/10 PHP
一个PHP的String类代码
2010/04/20 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
jQuery判断元素是否是隐藏的代码
2011/04/24 Javascript
jQuery EasyUI API 中文文档 可调整尺寸
2011/09/29 Javascript
利用try-catch判断变量是已声明未声明还是未赋值
2014/03/12 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
JS设计模式之数据访问对象模式的实例讲解
2017/09/30 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
vue中v-cloak解决刷新或者加载出现闪烁问题(显示变量)
2018/04/20 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
使用Karma做vue组件单元测试的实现
2020/01/16 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
详解阿里Node.js技术文档之process模块学习指南
2021/01/04 Javascript
[01:20]DOTA2更新全新英雄 天涯墨客现已加入游戏
2018/08/25 DOTA
python生成器的使用方法
2013/11/21 Python
Python中的rfind()方法使用详解
2015/05/19 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
2019/06/14 Python
python 处理微信对账单数据的实例代码
2019/07/19 Python
python元组的概念知识点
2019/11/19 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
OpenCV Python实现图像指定区域裁剪
2021/03/12 Python
CSS3 渐变(Gradients)之CSS3 径向渐变
2016/07/08 HTML / CSS
车间统计员岗位职责
2014/01/05 职场文书
学校庆元旦歌咏比赛主持词
2014/03/18 职场文书
生育关怀行动实施方案
2014/03/26 职场文书
村长贪污检举信
2014/04/04 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
博士生专家推荐信
2015/03/25 职场文书
Django实现翻页的示例代码
2021/05/24 Python