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中logging模块的用法实例
Sep 29 Python
极简的Python入门指引
Apr 01 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
python处理大数字的方法
May 27 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
详解Python中的文件操作
Aug 28 Python
Python实现的根据IP地址计算子网掩码位数功能示例
May 23 Python
python+flask实现API的方法
Nov 21 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
python文件与路径操作神器 pathlib
Apr 01 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面向对象编程快速入门
2006/10/09 PHP
真正的ZIP文件操作类(php)
2007/07/21 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JavaScript前补零操作实例
2015/03/11 Javascript
深入理解js数组的sort排序
2016/05/28 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
vue组件 $children,$refs,$parent的使用详解
2017/07/31 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
[03:57]2016完美“圣”典风云人物:rOtk专访
2016/12/09 DOTA
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
Python的Django框架使用入门指引
2015/04/15 Python
Python tornado队列示例-一个并发web爬虫代码分享
2018/01/09 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
Django中的cookie和session
2019/08/27 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
使用PyWeChatSpy自动回复微信拍一拍功能的实现代码
2020/07/02 Python
Python csv文件记录流程代码解析
2020/07/16 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
Java程序员面试题
2016/09/27 面试题
实习鉴定评语
2014/01/19 职场文书
三年级小学生评语
2014/04/22 职场文书
小学校园文化建设汇报材料
2014/08/19 职场文书
2014学校领导四风对照检查材料思想汇报
2014/09/23 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
2015年庆祝国庆节66周年演讲稿
2015/07/30 职场文书