2013-10-25 6 views
1

Python을 사용하여 실행하는 데 오랜 시간이 걸리는 (5 분 이상) REST API에 액세스하고 있습니다. 내가 요청을 만들기 위해 pyelasticsearch를 사용하고,이 같은 10 분으로 시간 제한 설정을 시도 :파이썬에서 HTTP 요청을 만들고 응답 시간이 오래 걸린다

es = ElasticSearch(config["es_server_url"], timeout=600) 
results = es.send_request("POST", 
         [config["es_index"], "_search_with_clusters" ], 
         cluster_query) 

을하지만 시간이 초과 requests.exceptions.ConnectionError (Caused by <class 'socket.error'>: [Errno 104] Connection reset by peer)

와 오분 (안 10) 후 나는 소켓을 설정하려 시간 초과 및 다음과 같은 요청을 직접 사용하십시오.

socket.setdefaulttimeout(600) 
try: 
    r = requests.post(url, data=post, timeout=600) 
except: 
    print "timed out" 

그리고 약 5 분마다 매번 시간 초과됩니다.

요청이 반환 될 때까지 스크립트를 더 오래 기다리게하려면 어떻게해야합니까?

+2

그 오류는 서버가 사용자의 소켓을 닫았습니다. 따라서 더 이상 시간 초과를 지정하면 도움이되지 않습니다. (당신이 실제로 말하고있는 회사 웹 프록시가 타임 아웃을 가지고 있거나, 중간에있는 일부 라우터가 당신을 차단하기로 결정했다는 것을 의미 할 수도 있습니다. 그러나 당신의 코드 타임 아웃은 불가능합니다.) 서버 코드, 또는 다른 사람의 코드? – abarnert

+0

예, 제 서버입니다. 팁 고마워. 나는 실제 서버 이름 : port에 직접 요청을 시도하고 8.5 분 후에 성공했다. 5 분 후에 연결을 닫는 것은 BigIP였습니다. – kielni

답변

1

"피어에 의한 연결 재설정"(별명 : ECONNRESET)은 서버 또는 사용자와 서버 간의 일부 라우터 나 프록시가 연결을 강제로 종료했음을 의미합니다.

그래서 시간이 오래 걸리면 아무런 차이가 없습니다. 연결을 닫는 사람을 파악하고 더 오래 기다리도록 구성해야합니다.

볼만한 장소는 서버 응용 프로그램 자체 (해당 응용 프로그램을 구동하는 서버 프로그램 (예 : mod_wsgi, Apache와 함께 Apache를 사용하는 경우),로드 균형 조정 라우터 또는 프런트 엔드 서버 또는 역방향 프록시 해당 서버 또는 클라이언트 앞의 웹 프록시.

문제가 발생한 지점을 파악한 후에는 문제를 해결할 수없는 경우 서버에서 클라이언트로 유입되어 문제를 해결할 수 있습니다. 무해하지만 무해한 것을 보내야합니다 (HTTP 100 , 여분의 헤더, 120 초마다 귀하의 클라이언트가 건너 뛸 수있는 방법을 알고있는 본문 텍스트). 전화를 끊은 구성 요소에 따라 작동 여부는 다를 수 있습니다.