2013-06-24 1 views
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 

recvsock_realsocket(family, type, proto)의 인스턴스이다. 그리고 socket.py에서 찾았습니다 :

import _socket 
_realsocket = _socket.socket 

_socket이란 무엇입니까? 왜 return sock.recv(*args) 전체 프로그램을 차단하지 않을까요?

답변

1

_socket은 실제 네트워크 통신, 및 socket.py (표준 라이브러리 또는 gevent에서)를 사용하여 일반적인 사용을 위해 파이썬의 표준 C 라이브러리입니다.

그런 다음,

```self._sock.setblocking(0)``` 

이 사항이

을 비 블로킹 소켓 객체를 만들 초기화 gevent.socket에서 클래스 소켓의 조사
관련 문제