python eventlet绿化和patch原理
作者:妙音 时间:2022-02-22 11:10:14
说明
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等等几个模块,其它模块需要用直接引用绿化
来源:http://yongqing.is-programmer.com/posts/215593.html
标签:python,eventlet,绿化,patch
0
投稿
猜你喜欢
跨浏览器的inline-block[译]
2009-03-11 21:04:00
python 绘制拟合曲线并加指定点标识的实现
2023-07-25 20:29:51
索引在Oracle中的应用深入分析
2023-07-04 19:50:49
python常见的占位符总结及用法
2023-10-11 10:39:58
如何防止Application对象在多线程访问中出现错误?
2009-11-22 19:18:00
Python实现读取文件的方法总结
2021-05-04 00:56:26
ansible-playbook实现自动部署KVM及安装python3的详细教程
2021-09-02 23:13:12
Python实现嵌套列表及字典并按某一元素去重复功能示例
2023-02-22 10:44:05
不得不承认:韩国的 Web 设计很唯美
2009-05-13 13:26:00
php中instanceof 与 is_a()区别分析
2023-11-19 06:04:56
python基础之定义类和对象详解
2023-06-15 05:35:12
Python实现七彩蟒蛇绘制实例代码
2022-04-28 20:03:37
pyecharts如何实现显示数据为百分比的柱状图
2021-06-27 17:11:52
100行Python代码实现自动抢火车票(附源码)
2022-12-16 12:14:09
Python代码需要缩进吗
2022-05-07 18:21:15
改善登陆界面的用户体验: 自动聚焦表单
2009-12-09 16:13:00
block 和 inline 答案揭晓~ 另付一则,关于 word-break
2009-12-08 13:06:00
Python使用QRCode模块生成二维码实例详解
2022-07-04 16:50:44
Python常见数据类型转换操作示例
2022-11-20 19:13:05
使用php-timeit估计php函数的执行时间
2023-10-07 19:56:50