2011-08-05 4 views
1

대 연결 httplibHTTPSConnection을 만드는 충분히 쉬운 시간 제한을 설정합니다 :파이썬 httplib.HTTPSConnection 시간 제한 응답

connection = httplib.HTTPSConnection('some.server.com', timeout=10) 
connection.request('POST', '/api', xml, headers={'Content-Type': 'text/xml'}) 
response = connection.getresponse().read() 

이 작업, 예를 들어, 다양한 부분이 있습니다 연결이 수락되고 응답이 수신됩니다.

전체 작업 시간 초과가 적용됩니까? 원격 호스트가 연결을 수락하지만 응답을 보내지 않으면 여전히 시간 초과됩니까? 타임 아웃을 설정하면 최대 10 초 동안 작동이 차단되는지 확인할 수 있습니다.

일부 컨텍스트 :

내가 외부 API에 연결하고이 작업이 차단하려는. 10 초 이상 동안 차단되지 않으면 10 초 이상 차단되면 차단을 중지하고 예외를 발생시킵니다. 외부 API에 연결할 수없는 경우 올바르게 처리하고 있지만 연결을 허용하지만 응답하지 않는 경우에는 확실하지 않습니다.

답변

2

표준 라이브러리 구현이 소켓 읽기 작업에서 시간 초과를 지원하지 않는 것 같습니다. 이 경우에는 HTTPSConnection (기술적으로는 HTTPResponse._safe_read 메소드)을 비 블로킹해야합니다.

도 도움이 될 수 있습니다 여기에 비슷한 질문이있다 : 즉 완전히 비 블록 I/O를 지원하는, 귀하의 경우 가능하다면

Does python's httplib.HTTPConnection block?

내가 모든 응용 프로그램에 대한 gevent을 사용을하고 한 번에 여러 연결에 대해서도 원하는 시간 초과 구성표를 구현할 수 있습니다.

+0

사실 나는 그것을 차단하고 싶습니다. 응답 수신에 이르기까지 전체 작동이 최대 10 초 동안 차단되도록하고 싶습니다. –