반응형
출처 : 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 |