0

Raspbian 8 (Jessie)과 함께 Raspberry Pi 3을 사용하여 신뢰할 수없는 셀 연결을 사용하여 서버에 데이터를 게시합니다. 데이터를 보내는 스레드가 멈추지 만 시간이 초과되지 않는 까다로운 버그가 있었기 때문에 데이터 게시가 오랜 기간 동안 전혀 기록되지 않거나 일시 중지되었습니다.느린 (그러나 죽지는 않은) 연결에서 requests.post 시간 초과가 가능합니까?

Pi의 연결을 인위적으로 느리게하여 (tc/netem을 사용하여 약 20 초의 대기 시간을 추가하여) 이것을 복제했습니다. 이렇게하면 요청이 제한 시간보다 오래 정지됩니다. 필자는 (확실하지는 않지만) 매우 느린 연결을 통해 패킷을 거의 생성하지 않기 때문에 이것이라고 가정합니다. 이런 일이 발생하면 오류를 제기 할 수있는 방법이 있습니까? 또는 내 가정이 틀렸는가?

요청 코드 :

result = requests.post(target_url, json=data_dict, timeout=5) 

덕분에 docs으로 당

답변

0

:

timeout는 전체 응답 다운로드에 시간 제한되지 않습니다; 오히려, 서버가 timeout 초 동안 응답을 발행하지 않은 경우 예외가 발생합니다 (정확하게 말하면 시간 초과 초 동안 기본 소켓에서 수신 된 바이트가없는 경우).

즉, 시간 초과가 만료되기 전에 서버에서 응답을 시작하기 만하면 시간 초과가 트리거되지 않습니다.

+0

고마워요! 완료되었는지 여부에 관계없이 일정 시간이 지나면 요청 시간 초과 (또는 다른 오류 발생)가 발생할 수있는 방법이 있는지 알고 있습니까? –

+0

@ RuaraidhDobson : 예. 나는 이것을 duplicate로 표시했다. –

+0

고마워요 - 당신 말이 맞아요, 큰 도움이됩니다. 중복 된 질문에 대해 유감입니다. –

0

요청에 응답이없는 경우 코드에서 예외가 발생합니다. 두 가지 예외가

있습니다 : 응용 프로그램이 당신이 그렇지 않으면 requests.exceptions.ConnectTimeout 를 얻을 수 있습니다 연결할 수없는 경우 요청이 어떤 답을하지 않는 경우 , 당신은 requests.exceptions.ReadTimeout

은 자세한 내용은이를 확인하시기 바랍니다거야 : http://docs.python-requests.org/en/master/user/quickstart/#timeouts

관련 문제