0
나는 gevent.socket
을 읽고있다. 그러나 나는 이해할 수 없다.어떻게 gevent 소켓은 현재 그린렛 만 차단할 수 있습니까?
def recv(self, *args):
sock = self._sock # keeping the reference so that fd is not closed during waiting
while True:
try:
return sock.recv(*args)
except error, ex:
if ex[0] == EBADF:
return ''
if ex[0] != EWOULDBLOCK or self.timeout == 0.0:
raise
# QQQ without clearing exc_info test__refcount.test_clean_exit fails
sys.exc_clear()
try:
wait_read(sock.fileno(), timeout=self.timeout, event=self._read_event)
except error, ex:
if ex[0] == EBADF:
return ''
raise
는 recv
의 sock
는 _realsocket(family, type, proto)
의 인스턴스이다. 그리고 socket.py에서 찾았습니다 :
import _socket
_realsocket = _socket.socket
_socket이란 무엇입니까? 왜 return sock.recv(*args)
전체 프로그램을 차단하지 않을까요?