2017-02-28 8 views
1

python을 위해 grequests 라이브러리를 사용하여 여러 URL을 동시에 호출하려고합니다. 문제는 grequests의 논리를 이해하지 못한다는 것입니다. 다음은 내 코드의 샘플 (편집 된 버전)입니다 : -Python grequests issue

respArray = [] 
response = [] 
sessionvar = requests.Session() 
sessionvar.trust_env = False 
for each in range(0,len(urls)): 
     response.append(grequests.get(urls[each],session=sessionvar,cookies=cookiesArray[each])) 
     eachresp = grequests.map(response) 
for r in eachresp: 
    respArray.append(r.json()) 

return respArray 

내 respArray는 URL의 반환 된 각각의 배열을 반환합니다. 배열을 실행할 때 각각의 루프가 동시에 실행되지 않는 것처럼 배열이 실행됩니다. 나는 내가 어떻게 더 빨리 결과를 얻을 수 있도록 동시에 실행할 수 있습니다 지 않습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

이 코드 :

for each in range(0,len(urls)): 
     response.append(grequests.get(urls[each],session=sessionvar,cookies=cookiesArray[each])) 
     eachresp = grequests.map(response) 
for r in eachresp: 
    respArray.append(r.json()) 

효과적으로 각각의 요청을 순차적으로 전송된다. 당신은 URL을 보내고 grequests가 에 그것을 보낼 때까지 각각 루프 반복을 기다립니다.

대기 :

은 기본적으로는 같다

# Build a list of unsent requests 
requests = (grequests.get(url) for url in urls) 
# Send them all at once 
results = grequests.map(requests) 
return [r.json() for r in results] 

이렇게하면 보내지 않은 요청 목록이 작성되고 , 그 다음에 모두이 모두 전송됩니다. 즉 :

  • 루프 반복,
  • 동시에 모든 요청 실제로 전달해야
+0

보내기를 ... 보내지 않은 요청

  • 를 작성, 보내지 않은 요청
  • 루프 반복을 만들 쿠키를 데이터를 검색하는 토큰 역할을 .. 내가 무엇을 찾고있는 r.json() 순차적으로 각 URL의 XML 구조에서 더 깊은 무언가를 호출하는 것입니다 .. – sindhujit

  • +0

    r.json() 나에게 모든 응답을 함께 제공합니다. 어떻게 각자를 사용하여 각각의 URL에서 더 깊은 곳으로 전화를 걸 수 있습니까? 그렇게하면 검색 기준을 더 빨리 만들 수 있습니다. – sindhujit