2014-07-16 2 views

답변

15

나는 관용적 방법이 확실하지 않다,하지만 간단한 방법은 socket.socket 클래스를 확인하는 것입니다 :

import gevent.monkey, gevent.socket 
gevent.monkey.patch_all() 
import socket 

if socket.socket is gevent.socket.socket: 
    print "gevent monkey patch has occurred" 
+1

그냥 약간의 제안을, 더 파이썬 방법은 다음과 같습니다'socket.socket이 –

+1

@WesMason gevent.socket' 경우 고마워, 좋다. 그것은 socket.socket이 gevent.socket.socket 인 경우'해야합니다. – Anorov

9

gevent.monkey.saved DICT 만 항목이 패치 때 업데이트하고, 원래되어 AFAIK (예 : unpatching에서 제거 된) 사전 내에 배치됩니다.

>>> from gevent.monkey import saved 
>>> 'sys' in saved 
True 
+1

안녕하세요, Wes! 이것은 좋은 생각이지만, Gevent 1.03에서 "saved"가 나타나는 반면, Gevent 0.13으로 돌아 가기 때문에 다른 대답을 받아 들일 것입니다. –

+0

'monkey.patch_all()'을 실행 한 후에'monkey.saved.keys()'를 살펴보면,''sys "'키가 있다고 생각하지 않습니다. 이것은 원숭이 - 패치를 탐지하는 유효한 방법이 아닙니다. – Rockallite

3

다음은 geent monkey patching이 활성화되어 있는지 감지하기 위해 사용한 것입니다. 언급 A. Jesse Jiryu Davis으로

def is_gevent_monkey_patched(): 
    try: 
     from gevent import monkey 
    except ImportError: 
     return False 
    else: 
     return bool(monkey.saved) 

,이 gevent 1.0.x와 만 작동합니다.

gevent 1.1에에 업데이트 됨 : an support API으로 개체가 원숭이 패치되었는지 여부를 확인하는 데 도움이됩니다. 그래서 gevent 1.1에 대한 대답이 될 수있다 :

def is_gevent_monkey_patched(): 
    try: 
     from gevent import monkey 
    except ImportError: 
     return False 
    else: 
     return monkey.is_module_patched('__builtin__') 

은 BTW, 나는 monkey.is_module_patched('sys') 항상 False를 반환 찾을 수 있습니다. monkey.patch_all()를 실행 한 후 monkey.saved.keys()로 보면, I는 다음과 같은 모듈이 확인 유효 생각 :

['_threading_local', '_gevent_saved_patch_all', 'socket', 'thread', 'ssl', 
'signal', '__builtin__', 'subprocess', 'threading', 'time', 'os', 'select'] 
+0

고마워, 그거 참 좋았어. –

관련 문제