python eventlet綠化和patch原理
說明
eventlet是一個必備工具,經常用,綠化原理有點忘記了,重新復習一遍.
三個主要問題
1. 綠化的原理是什么?2. 綠化怎么管理?3. 綠化怎么引入?
綠化原理
利用select/epolls/kqueue等操作系統(tǒng)提供的非阻塞操作,將阻塞改為非阻塞.
引用管理
eventlet在import之后,將模塊中的屬性綠化.用一小段代碼來查看看
import sysimport 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:workspacevenvxxxlibsite-packageshttplib2__init__.py’><module ’eventlet.green.socket’ from ’D:workspacevenvxxxlibsite-packageseventletgreensocket.py’>================_socket <module ’_socket’ from ’c:pythonpython36DLLs_socket.pyd’>socket <module ’socket’ from ’c:pythonpython36libsocket.py’>__original_module_socket <module ’socket’ from ’c:pythonpython36libsocket.py’> # 說明了什么?綠化只是替換httplib2模塊中的引用屬性socket。并未改變sys.modules中的屬性
引入綠化方法一:直接import
from eventlet.green import socket
引入綠化方法二:eventlet.import_patch
1.好處: 能綠化模塊內部的系統(tǒng)模塊2.只能綠化os, select, socket, thread, time, psycopy, MySQLdb, bultines, subprocess3.如果是import threading,不會自動綠化, 需要from eventlet.green import threading
import eventlethttplib2 = eventlet.import_patched(’httplib2’)print(httplib2)print(httplib2.socket) # 打印<module ’httplib2’ from ’D:workspacevenvautumn-secslibsite-packageshttplib2__init__.py’><module ’eventlet.green.socket’ from ’D:workspacevenvautumn-secslibsite-packageseventletgreensocket.py’>
引入綠化方法三:eventlet.monkey_patch
1.與import_patch不同,會直接修改sys.modules2.但是也只能綠化os,select等等幾個模塊,其它模塊需要用直接引用綠化
以上就是python eventlet綠化和patch原理的詳細內容,更多關于python eventlet的資料請關注好吧啦網其它相關文章!
相關文章:
1. 如何基于Python Matplotlib實現(xiàn)網格動畫2. 利用promise及參數(shù)解構封裝ajax請求的方法3. ASP 信息提示函數(shù)并作返回或者轉向4. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說明5. ThinkPHP5實現(xiàn)JWT Token認證的過程(親測可用)6. Ajax實現(xiàn)表格中信息不刷新頁面進行更新數(shù)據7. JSP數(shù)據交互實現(xiàn)過程解析8. windows服務器使用IIS時thinkphp搜索中文無效問題9. .NET中l(wèi)ambda表達式合并問題及解決方法10. PHP設計模式中工廠模式深入詳解
