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的Twisted框架编写简单的网络客户端
Apr 16 Python
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
Python3实现并发检验代理池地址的方法
Sep 18 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
python matlibplot绘制多条曲线图
Feb 19 Python
Python之NumPy(axis=0 与axis=1)区分详解
May 27 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
快速解决jupyter启动卡死的问题
Apr 10 Python
深入了解Python装饰器的高级用法
Aug 13 Python
python爬虫之selenium库的安装及使用教程
May 23 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模板引擎SMARTY
2006/10/09 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
2010/09/03 Javascript
js限制textarea每行输入字符串长度的代码
2012/10/31 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
jquery实现textarea输入框限制字数的方法
2015/01/15 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
动态设置form表单的action属性的值的简单方法
2016/05/25 Javascript
jQuery简单入门示例之用户校验demo示例
2016/07/09 Javascript
清除输入框内的空格
2016/12/21 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
jquery仿微信聊天界面
2017/05/06 jQuery
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
Python自定义函数的创建、调用和函数的参数详解
2014/03/11 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
Face++ API实现手势识别系统设计
2018/11/21 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
阿迪达斯印度官方商城:adidas India
2017/03/26 全球购物
消防器材管理制度
2014/01/28 职场文书
搞笑婚前保证书
2015/02/28 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书
Python基础知识学习之类的继承
2021/05/31 Python
Nginx实现会话保持的两种方式
2022/03/18 Servers