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警察与小偷的实现之一客户端与服务端通信实例
Oct 09 Python
Python中用于去除空格的三个函数的使用小结
Apr 07 Python
Python画图学习入门教程
Jul 01 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
python微信跳一跳系列之棋子定位颜色识别
Feb 26 Python
Python实现的绘制三维双螺旋线图形功能示例
Jun 23 Python
解决python opencv无法显示图片的问题
Oct 28 Python
Python numpy数组转置与轴变换
Nov 15 Python
django在开发中取消外键约束的实现
May 20 Python
Python3.8安装Pygame教程步骤详解
Aug 14 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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接口和抽象类使用示例详解
2014/03/02 PHP
ThinkPHP惯例配置文件详解
2014/07/14 PHP
php实现倒计时效果
2015/12/19 PHP
Laravel框架实现多个视图共享相同数据的方法详解
2019/07/09 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
2013/12/24 Javascript
jQuery实现鼠标划过展示大图的方法
2015/03/09 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
解析vue中的$mount
2017/12/21 Javascript
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
2020/10/12 Javascript
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python使用matplotlib实现的图像读取、切割裁剪功能示例
2018/04/28 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
python新手学习使用库
2020/06/11 Python
Python Switch Case三种实现方法代码实例
2020/06/18 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
全网最细 Python 格式化输出用法讲解(推荐)
2021/01/18 Python
购买澳大利亚最好的服装和内衣在线:BONDS
2016/10/14 全球购物
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
小学生国旗下演讲稿
2014/04/25 职场文书
温馨提示标语
2014/06/26 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
详解Go语言Slice作为函数参数的使用
2021/07/02 Golang
Lombok的详细使用及优缺点总结
2021/07/15 Java/Android