반응형
출처 : https://stackoverflow.com/questions/2719017/how-to-set-timeout-on-pythons-socket-recv-method
파이썬 소켓 수신 메소드에서 timeout을 정하는 방법?
저는 파이썬의 소켓 수신 메소드에서 timeout을 정하고 싶습니다. 어떻게 할 수 있을까요?
11개의 답변 중 1개의 답변만 추려냄
일반적인 접근은 timeout이 발생할 때까지 데이터가 접근 가능할 때까지 select()를 사용하는 것입니다. 데이터가 실제로 가능할 때만 recv()를 호출합니다. 안전을 위해, 우리는 recv가 무한으로 block하지 않는 것을 보장하기 위해 non-blocking 모드로 소켓을 설정할 수 있습니다. select()는 한번에 하나 이상의 소켓을 기다리도록 하는데 사용될 수 있습니다.
import select
mysocket.setblocking(0)
ready = select.select([mysocket], [], [], timeout_in_seconds)
if ready[0]:
data = mysocket.recv(4096)
만약 많은 열려있는 파일 디스크립터가 있다면, poll()이 select()보다 더 효율적인 대안입니다.
다른 옵션은 socket.settimeout()을 사용하여 소켓의 모든 연산에 timeout을 설정하는 것입니다. 하지만 당신은 다른 답변에서 해당 솔루션을 명시적으로 거부했던 것을 확인하였습니다.
반응형
'Python' 카테고리의 다른 글
| request 오류를 발생하는 최고의 방법은? (0) | 2020.07.13 |
|---|---|
| 파이썬 리스트 차집합 연산 (2) | 2020.07.07 |
| 뉴욕 도시 시간을 어떻게 얻을 수 있습니까? (2) | 2020.06.23 |
| assertRaises - unittest에서 오류 테스트 하기 (0) | 2020.06.15 |
| 파이썬 AttributeError: 'module' 객체는 'SSL_ST_INIT' 속성이 없습니다 (0) | 2020.06.08 |