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
投稿
猜你喜欢
史上最简单的MySQL数据备份与还原教程(下)(三十七)
2024-01-25 06:03:33
Python3.7 dataclass使用指南小结
2023-10-02 13:36:14
如何“看看”服务器上的那个文件还在不在?
2009-11-02 20:17:00
python3.5 tkinter实现页面跳转
2022-08-03 22:23:46
利用python实现全屏爱心雨向喜欢的人表白
2022-05-29 22:32:14
Golang限流库与漏桶和令牌桶的使用介绍
2024-05-10 13:57:50
pytorch实现mnist分类的示例讲解
2022-03-30 09:17:19
一文了解Django缓存机制
2023-08-18 06:34:21
使用TFRecord存取多个数据案例
2023-07-14 22:26:34
Python 序列的方法总结
2021-12-12 11:14:23
Python读取和存储yaml文件的方法
2023-03-26 10:23:44
深入理解Python 多线程
2021-03-25 05:25:28
Python Numpy 自然数填充数组的实现
2023-12-18 16:51:37
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2023-02-14 17:08:47
python多线程之事件Event的使用详解
2022-12-21 11:46:10
python定时器(Timer)用法简单实例
2021-01-10 15:43:04
javascript闭包的秘密
2008-09-28 20:39:00
深入分析C#连接Oracle数据库的连接字符串详解
2024-01-20 23:46:29
MySQL数据备份之mysqldump的使用方法
2024-01-17 05:25:46
解决mysql ERROR 1045 (28000)-- Access denied for user问题
2024-01-24 01:30:43