2017-02-28 66 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