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
  • asp之家 网络编程 m.aspxhome.com