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 07 Python
php使用递归与迭代实现快速排序示例
Jan 23 Python
python获取android设备的GPS信息脚本分享
Mar 06 Python
python开启多个子进程并行运行的方法
Apr 18 Python
python实现两个文件合并功能
Apr 01 Python
使用Python实现企业微信的自动打卡功能
Apr 30 Python
浅析pandas 数据结构中的DataFrame
Oct 12 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
解决c++调用python中文乱码问题
Jul 29 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python机器学习之底层实现KNN
Jun 20 Python
python pandas 解析(读取、写入)CSV 文件的操作方法
Dec 24 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
在PHP中操作Excel实例代码
2010/04/29 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
浅析php数据类型转换
2014/01/09 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
ThinkPHP表单数据智能写入create方法实例分析
2015/09/27 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
读jQuery之十 事件模块概述
2011/06/27 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
vue2.0 如何把子组件的数据传给父组件(推荐)
2018/01/15 Javascript
Vue.JS实现垂直方向展开、收缩不定高度模块的JS组件
2018/06/19 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
JS添加或删除HTML dom元素的方法实例分析
2019/03/05 Javascript
微信小程序缓存支持二次开发封装实现解析
2019/12/16 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
JS实现百度搜索框
2021/02/25 Javascript
python获取本机外网ip的方法
2015/04/15 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
详解Python3 pickle模块用法
2019/09/16 Python
幼儿园新年寄语
2014/04/03 职场文书
终止合同协议书
2014/04/17 职场文书
小学班长竞选演讲稿
2014/04/24 职场文书
本科毕业生自荐信
2014/06/02 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
2015年乡镇财政工作总结
2015/05/19 职场文书
签证工作证明模板
2015/06/15 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技
Windows Server 2016服务器用户管理及远程授权图文教程
2022/08/14 Servers