2017-02-28 94 views
1

我想在使用python的grequests庫的同時調用幾個url。問題是我不太瞭解grequests的邏輯。下面是我的代碼示例(編輯版本): -Python grequests問題

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返回從urls返回的每個單獨的數組。 當我運行該數組時,就像每個人都在自己的循環中運行一樣,而不是同時運行。我沒有得到我如何得到它同時運行,以便我得到更快的結果..任何幫助將不勝感激。

回答

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發送每個循環迭代。

基本上它看起來像:

  • 循環迭代,等待請求
  • 循環迭代,等待請求

您需要遵循怎樣their documentation suggests

# 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

其實我需要傳遞cookies作爲一個令牌來檢索數據..我在尋找的是使用r.json()按順序調用每個網址的xml結構中的更深層次的東西。 – sindhujit

+0

r.json()給我所有的答覆在一起..我怎麼能使用他們每個人打電話並行地在每個URL更深的東西?這樣它會使我的搜索標準更快。 – sindhujit