python 이벤트렛 녹화와patch 원리

설명
이벤트렛은 필수 도구로 자주 사용되며 녹화 원리를 잊어버리고 다시 한 번 복습합니다.
세 가지 주요 문제
1. 녹화의 원리는 무엇입니까?
2. 녹화는 어떻게 관리합니까?
3. 녹화는 어떻게 도입합니까?
녹화 원리
select/epolls/kqueue 등 운영체제가 제공하는 비차단 조작을 이용하여 차단을 비차단으로 변경합니다.
참조 관리
이벤트let은 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 
녹화 방법 도입 1: 직접import

from eventlet.green import socket
녹화 방법 도입 2:eventlet.import_patch 
1. 장점: 녹화 모듈 내부의 시스템 모듈
2.os,select,socket,thread,time,psycopy,MySQLdb,bultines,subprocess만 녹화 가능
3.importthreading이면 자동으로 녹화되지 않습니다.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'>
녹화 방법 도입 3:eventlet.monkey_patch
1. import와_patch가 다르면sys를 직접 수정합니다.modules
2. 그러나 os,select 등 몇 개의 모듈만 녹화할 수 있고 다른 모듈은 직접 녹화를 인용해야 한다
이상은python 이벤트렛 녹화와patch 원리에 대한 상세한 내용입니다.python 이벤트렛에 대한 더 많은 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기