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 29 Python
Python对文件操作知识汇总
May 15 Python
Pycharm学习教程(7)虚拟机VM的配置教程
May 04 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
python+PyQT实现系统桌面时钟
Jun 16 Python
python七夕浪漫表白源码
Apr 05 Python
Django发送邮件功能实例详解
Sep 02 Python
Python计算信息熵实例
Jun 18 Python
Python如何将模块打包并发布
Aug 30 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
Oct 29 Python
pytorch通过训练结果的复现设置随机种子
Jun 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
smarty基础之拼接字符串的详解
2013/06/18 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
php 如何禁用eval() 函数实例详解
2016/12/01 PHP
php-app开发接口加密详解
2018/04/18 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
2013/09/06 Javascript
js自定义鼠标右键的实现原理及源码
2014/06/23 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python实现计算最小编辑距离
2016/03/17 Python
详解MySQL数据类型int(M)中M的含义
2016/11/20 Python
Python中交换两个元素的实现方法
2018/06/29 Python
使用python画社交网络图实例代码
2019/07/10 Python
基于python进行抽样分布描述及实践详解
2019/09/02 Python
python实现简单图书管理系统
2019/11/22 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
2020/02/25 Python
用Python自动清理系统垃圾的实现
2021/01/18 Python
Python实现微信表情包炸群功能
2021/01/28 Python
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
.NET概念性的面试题
2012/02/29 面试题
开会迟到检讨书
2014/01/08 职场文书
植树节标语
2014/06/27 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
写给领导的感谢信
2015/01/22 职场文书
汽车4S店前台接待岗位职责
2015/04/03 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
大学毕业论文致谢词
2015/05/14 职场文书
门面租赁合同范文
2019/08/06 职场文书
导游词之阆中古城
2019/12/23 职场文书