欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python eventlet綠化和patch原理

 更新時(shí)間:2020年11月21日 17:31:41   作者:妙音  
這篇文章主要介紹了python eventlet綠化和patch原理,幫助大家更好的理解和學(xué)習(xí)python eventlet工具的使用,感興趣的朋友可以了解下

說明

eventlet是一個(gè)必備工具,經(jīng)常用,綠化原理有點(diǎn)忘記了,重新復(fù)習(xí)一遍.

三個(gè)主要問題 

1. 綠化的原理是什么?
2. 綠化怎么管理?
3. 綠化怎么引入?

綠化原理

利用select/epolls/kqueue等操作系統(tǒng)提供的非阻塞操作,將阻塞改為非阻塞.

引用管理 

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)
 
 
# 打印內(nèi)容
<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.好處: 能綠化模塊內(nèi)部的系統(tǒng)模塊
2.只能綠化os, select, socket, thread, time, psycopy, MySQLdb, bultines, subprocess
3.如果是import threading,不會(huì)自動(dòng)綠化, 需要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不同,會(huì)直接修改sys.modules
2.但是也只能綠化os,select等等幾個(gè)模塊,其它模塊需要用直接引用綠化

以上就是python eventlet綠化和patch原理的詳細(xì)內(nèi)容,更多關(guān)于python eventlet的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論