2016-10-12 2 views
2

grequests을 사용하여 약 10,000 건의 전화를 걸었지만이 중 일부는 503으로 반환됩니다. 모든 전화를 한 번에 대기열에 넣지 않으면이 문제가 해결됩니다. 1000 개 그룹으로 나누면 속임수를 쓰는 것 같습니다. 그러나이 503 오류를 잡아 내고 방금 request을 다시 시도하는 방법이 있는지 궁금합니다.503 오류 잡기 및 다시 시도 방법

import grequests 
rs = (grequests.get(u, headers=header) for u in urls) 
response = grequests.map(rs) 

나는이 정말 모호 알고 있지만,이 grequests를 사용하여 가능하면 내가 알지도 못하는 :

이 내가 호출하고 스레드를 결합하고있어 방법이다.

나는

import grequests 
rs = (grequests.get(u, headers=header) for u in urls) 
time.sleep(1) 
response = grequests.map(rs) 

을 시도 naivley 그러나 그것을 천천히 아무것도하지 않는다.

답변

2

아마 당신은 오류를 잡아하는 이벤트 후크를 사용하여 시도 할 수 요청 http://docs.python-requests.org/en/master/user/advanced/#event-hooks

import grequests 

def response_handler(response): 
    if response.status_code == '503': 
     print('error.503') 

rs = (grequests.get(u, headers=header, hooks = dict('response' : response_handler)) for u in urls) 
response = grequests.map(rs)` 
0

당신은 요청을 구성 할 수 Can I set max_retries for requests.request?에서 설명하는 일반적인 방법을 적용 할 수 있어야하고을 시도 할 urllib3를 다시 시작 grequests를 사용하여 기본 연결 또는 요청을 사용자 정의 할 수 있다고 가정합니다.