问题标签 [grequests]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1058 浏览

python - 通过 HTTPS 使用 gevent/grequests 的奇怪阻塞行为

以下代码每 200 毫秒发送一次请求,并且应在响应到来时异步处理它们。

通过 HTTP,它按预期工作 - 每 200 毫秒发送一次请求,并且每当响应到达时都会独立调用响应回调。然而,通过 HTTPS,只要响应到达,请求就会显着延迟(即使我的响应处理程序不起作用)。每个请求似乎都会调用响应回调两次,一次是零长度响应(编辑:这是因为重定向,并且似乎与阻塞问题无关,感谢 Padraic)。

是什么导致了 HTTPS 上的这种阻止行为?(www.bbc.co.uk只是一个地理上离我很远的例子,但它发生在我测试过的所有服务器上)。

grequests_test.py

$ ipython2 grequests_test.py 'http://www.bbc.co.uk'(预期结果)

ipython2 grequests_test.py 'https://www.bbc.co.uk'(请求延迟发送)

请注意,第一个响应似乎在下一个请求应该发送但没有发送很久之后到达。为什么在第一个响应到达之前睡眠没有返回,并且下一个请求被发送?

0 投票
2 回答
1351 浏览

python - 无法为 AWS Lambda 导入请求

我正在运行带有Python 2.7运行时的 AWS Lambda 脚本。但是,每当它初始化时,它就会开始导入grequests库,但由于它依赖于 gevent 而失败:

Gevent is required for grequests.

似乎它成功地找到了 grequests 库(因为它知道它需要 gevent)但失败了。

到目前为止我已经尝试过:

pip install --ignore-installed grequests -t .

pip install --ignore-installed grequests -t ./lib

pip install --ignore-installed gevent -t .

pip install --ignore-installed gevent -t ./lib

然后我按照此处的说明压缩目录的内容并上传到 AWS:http: //docs.aws.amazon.com/lambda/latest/dg/lambda-python-how-to-create-deployment-package。 html

似乎无论我尝试什么,Lambda 都无法找到gevent,但它能够毫无问题地找到其他非默认库。

0 投票
0 回答
2113 浏览

python - Python:带有grequests的异步请求并不比请求快得多

我刚刚开始学习如何使用requestsPython 中的模块从 API 获取数据。我将使用一个非常简单的 GET 请求调用此 API,但我需要执行 500,000 多次,只为每个请求传递不同的值。响应是一个 JSON 对象,我可以很容易地解析出我需要的东西。

问题是我目前这样做的方式(在for-loopusingrequests中)太慢了。据我了解,这种方法是发送请求,等待响应完成,然后移动到可迭代对象中的下一个请求。

为了解决这个问题,我遇到了grequest支持异步请求的模块。使用这种方法,我希望能够同时启动许多查询,可能以 100 个左右的批次进行。理想情况下,这将使我能够更快地通过我的大型迭代。

通过阅读文档和几个示例,我在下面创建了一个假设示例。显然,这是一个小得多的数据集,所以我没有包含我将用来将所有 URL 分成更小的块以便一次提交的部分。我希望在转移到我的真实数据集之前使用这个示例数据集来证明我的方法。

目前,使用下面的代码并使用timeit,每种方法的结果运行时如下:

  • for 循环和请求 = 16.9 秒
  • grequests async with mapping = 13.9 s

我的问题是,如果 grequests 方法同时启动所有请求,那为什么不是更快呢?此外,是否有人对如何更好地同时提交多个请求有任何建议?

0 投票
0 回答
1221 浏览

python - 解析:grequests“无”响应:连接被主机关闭?

我正在尝试一些代码,当我只有约 50 个请求要发送时效果很好,但现在我正在尝试更多请求(大约 200 个),我觉得服务器可能会在 60 个请求后关闭连接,因为我得到了“无”响应。

这是我正在使用的代码:

回复:

和回溯:

我怎样才能解决这个问题?我应该在发送 50 个请求后等待 30 秒,然后再发送 50 个吗?有人有关于向其服务器发出的请求的 Google 文档的链接吗?

谢谢!

0 投票
1 回答
2053 浏览

python - Python:grequest 和 request 给出不同的响应

我最初的任务:使用Trello API,通过 HTTP GET 请求获取数据。如果可能,异步运行请求和处理响应。API 提供者使用我通过一些密钥和令牌访问的“https://”URL。

我使用的工具:

  • Python 2.7.10 | Anaconda 2.3.0(64 位)| (默认,2015 年 5 月 28 日,16:44:52)[MSC v.1500 64 位 (AMD64)] on win32
  • requests库(刚导入没有安装)
  • grequests库(通过 pip 从此git repo安装)

原始任务结果:只有requests库有效,我得到了 Trello API 的响应,太好了。grequests库因 status_code = 302 而失败。

我试图理解它为什么会发生并编写了两个可重现的脚本。

脚本 Arequests使用的库:

控制台输出 A(由于 有一些异常http://fakedomain/):

脚本 Bgrequests用于map发送异步请求的库:

控制台输出 B

我可以根据这些信息得出的结论以及我相对较小的经验如下 - 由于某种原因grequests被远程网站拒绝,requests可以正常使用。只要 302 意味着某种重定向,似乎grequests无法从重定向到的源中获取数据何时requests可以。allow_redirects=True脚本 B中的 inget方法没有解决问题。

我想知道为什么图书馆会给出不同的回应。我可能会错过一些东西,这两个脚本必须根据设计返回不同的结果,而不是因为两个库之间的差异。

提前感谢您的帮助。

0 投票
2 回答
2491 浏览

python - grequests 响应的顺序是否与请求的顺序相同?

我正在使用 grequests 从使用相同 url 但不同参数的网站异步下载数据。

例如,

我怎么可能知道响应中的哪个响应属于 unsent_requests 的哪个请求?还是响应与未发送请求的顺序相同?

PS:response.url 没有给出任何线索,因为返回的是完全不同的 url。

0 投票
1 回答
260 浏览

python - Scrapy 节流和请求调度仅微服务

我目前正在使用 python 请求下载大约 20,000 页的 json。由于我正在抓取的服务器的速率限制,并且可能缺少异步调用/调度,我遇到了一些瓶颈。我认为 scrapy 会是一个很好的解决方案,因为我听说它具有解决与抓取相关的这些问题的功能。问题是,这些是我唯一需要的部分,我不需要蜘蛛/解析/orm/等。查看文档,不清楚我将如何仅分离这些组件。我需要一个微服务来处理scrapy 所做的这些部分。Scrapy 的 Django 的烧瓶。我看到 grequests 可能有助于异步,但如果我走那条路,我仍然需要速率限制和重试失败请求的方法。有人可以指出我正确的方向吗?

0 投票
0 回答
138 浏览

python - 嵌套的 Grequests 未执行

我试图让一个 grequest 产生额外的 grequest,但我发现没有执行二级 grequest 回调。用例是查看来自 api 的结果的第一页,用它来计算还有多少额外的页面要访问,然后为这些页面创建新的 grequest。这是相关的代码片段:

0 投票
1 回答
945 浏览

python - 通过 grequests 调用函数

我意识到有很多关于 grequests 的帖子,例如Asynchronous Requests with Python requests ,它描述了 grequests 的基本用法以及如何通过grequests.get()我从该链接中提取这段代码来发送钩子。

当我运行这个但是我没有输出

因为有 4 个链接,我希望输出是

我一直在四处寻找,但无法找到缺少输出的原因,我很有趣的是,我缺少一些关键信息。

0 投票
1 回答
2925 浏览

python - 在 python 中每秒发送超过 1000 个请求

我正在尝试同时向服务器发送请求,然后使用以下代码记录平均延迟:

这段代码工作得很好,但现在我打算每秒发送超过 1000 个请求。我遇到了这个答案,但我不确定如何grequests用于我的案例。一些见解将非常有帮助。

谢谢