1

我正在尝试使用 Python 的 grequests 库同时调用多个 URL。问题是我不太了解 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返回从 URL 返回的每个单独的数组。当我运行该数组时,就好像每个数组都在自己的循环中运行,而不是同时运行。我不知道如何让它同时运行,以便获得更快的结果。

4

1 回答 1

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]

这将建立您的未发送请求列表,然后将它们一起发送。换句话说:

  • 循环迭代,创建未发送的请求
  • 循环迭代,创建未发送的请求
  • ...
  • 同时发送所有请求
于 2017-02-28T00:46:36.100 回答