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脚本实现12306火车票查询系统
Sep 30 Python
Python调用C++程序的方法详解
Jan 24 Python
Python中用psycopg2模块操作PostgreSQL方法
Nov 28 Python
python导入模块交叉引用的方法
Jan 19 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python测试Kafka集群(pykafka)实例
Dec 23 Python
python 比较字典value的最大值的几种方法
Apr 17 Python
python批量修改文件名的示例
Sep 27 Python
pytorch Dropout过拟合的操作
May 27 Python
python unittest单元测试的步骤分析
Aug 02 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
第十五节--Zend引擎的发展
2006/11/16 PHP
封装一个PDO数据库操作类代码
2009/09/09 PHP
PHP测试程序运行时间的类
2012/02/05 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
cnblogs中在闪存中屏蔽某人的实现代码
2010/11/14 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
jquery 页面滚动到指定DIV实现代码
2013/09/25 Javascript
9款2014最热门jQuery实用特效推荐
2014/12/07 Javascript
js选择器全面解析
2016/06/27 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
js实现放大镜特效
2017/05/18 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
Paypal支付不完全指北
2020/06/04 Javascript
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
解决python super()调用多重继承函数的问题
2019/06/26 Python
python实现邮件发送功能
2019/08/10 Python
用Python将Excel数据导入到SQL Server的例子
2019/08/24 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
策划创业计划书
2014/02/06 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
医德医风演讲稿
2014/05/20 职场文书
工作求职自荐信
2014/06/13 职场文书
2015年党小组工作总结
2015/05/26 职场文书