问题标签 [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 回答
1502 浏览

python - 使用 grequests 发布和获取

我正在使用 grequests 更快地浏览网站。但是,我还需要登录该网站。

之前(仅使用请求)我可以这样做:

headers我的在哪里User-Agent

使用grequests我只能headers通过这样做:

反正有没有同时做一个POST,所以我可以登录?登录 URL 与我要报废的 URL 不同。

0 投票
2 回答
2083 浏览

python - 如何捕获 503 错误并重试请求

我过去grequests经常拨打大约 10,000 次电话,但其中一些电话返回为503. 如果我不一次将所有 10,000 个呼叫排队,这个问题就会消失。将其分成 1000 个组似乎可以解决问题。但是我想知道是否有办法捕获此503错误并重试request.

这就是我调用和组合线程的方式:

我知道这真的很模糊,但我什至不知道这是否可以使用grequests.

我naivley试过

但这并不能减慢它的速度。

0 投票
1 回答
1921 浏览

python - 在 Python 中对 grequest 应用重试

我有一个 URL 列表,我想使用 Python 的grequests模块对其进行 HTTP Get 请求。

某些 URL 不返回 OK 状态,在这种情况下,我想重试该 URL。

我可以使用一个队列来执行此操作,该队列存储所有尚未尝试过的 URL,或者在以前的尝试中未返回 200 的 URL,并继续批量发送请求。不过,我正在为此寻找一个更清洁/更“Pythonic”的实现。

我之前使用过该retrying模块进行重试,它非常整洁。我想知道是否有一些类似的、简洁的实现来重试 grequests 发送的请求。

0 投票
1 回答
243 浏览

python - 多个http get和post

任务是:

我目前是通过 requests 库来做这个的,但是一个一个做这个需要很多时间,最多可以达到 20000 个。

我尝试过multiprocessing,但由于某种原因,它在发送 5000-10000 次获取和发布后挂起。

我读到了 grequest,但它在那里说 Order of these responses does not map to the order of the requests you send out.。我需要订单,因为我必须根据我发送的 get 修改每个回复。

这里最好的选择是什么?我也读过,threading,tornado但是因为我把我的第一种方法搞砸了,multiprocessing我想在再次开始之前确定一下

0 投票
0 回答
226 浏览

python - 尽管尺寸很大,但对于一长串 url 的请求失败

我有一个形式的任务:

我曾经grequests做到这一点。55 urls现在它工作得很好。然后我尝试了。34000它失败了 Connection aborted.', gaierror(8, 'nodename nor servname provided, or not known')) for request <grequests.AsyncRequest object at 0x1bda93610>

然后我尝试了size参数 ingrequests.map并尝试了size= 64。得到了同样的错误。现在还有什么我可以做的,或者我需要使用其他东西并且grequests不适合这项任务。

0 投票
1 回答
3895 浏览

python - requests + grequests:“连接池已满,正在丢弃连接:”警告是否相关?

我在 localhost 上托管一个服务器,我想异步触发数百个 GET 请求。为此,我正在使用grequests. 一切似乎都很好,但我反复收到警告:

警告:requests.packages.urllib3.connectionpool:连接池已满,丢弃连接:date.jsontest.com

Session()搜索显示了在创建requests例如here时如何避免完整池问题。但是,有几件事:

  1. 即使我不采取任何措施来避免警告,我似乎始终能得到预期的结果。如果我确实使用了解决方法,任何超过数量的请求pool_maxsize都会发出警告。
  2. 如果请求数超过池大小,链接的解决方法仍会导致警告。我认为会有某种节流来防止在任何时候超过池大小
  3. 我似乎找不到禁用警告的方法。requests.packages.urllib3.disable_warnings()似乎什么也没做。

所以我的问题是:

  1. 这个警告实际上是什么意思?我的解释是,它只是放弃了触发请求,但似乎并非如此。
  2. 这个警告是否真的与grequests图书馆相关,特别是当我采取措施限制池大小时?我是否会在我的测试中引发意外的行为并侥幸获得预期的结果?
  3. 有没有办法禁用它?

一些要测试的代码:

0 投票
2 回答
1319 浏览

python - 如何在 AWS Lambda 上使用 Grequests?

我有一个Lambda函数,Python它使用了几个具有二进制依赖关系的库:numpyscipyPillow等。过去,我已经成功地将它们编译到Amazon Linux& 部署到Lambda.

不过,我最近添加Grequest到一堆依赖项中,它抛出的错误似乎与Grequest. 关于这个话题的其他问题导致了死胡同,所以把我的帽子放在戒指上。

第一个错误是简单的Grequests requires gevent或类似的。为了解决这个问题,我尝试pip install gevent --no-binary :all:在一个Amazon Linux实例上运行,将它与我的代码捆绑并上传到 Lambda。这对错误没有影响。

src然后我从repo下载gevent使用它编译它make(repo 的 README 中的命令引发了我没有记录的错误)。这产生了一个egg文件,我将其转换为一个whl文件并运行pip install gevent.whl -t .

我将生成的代码与我的捆绑在一起lambda.zip并上传。这导致了一个新错误module initialization error: lib/libptf77blas.a.gz: invalid ELF header

libptf77blas.a.gzlib我的文件夹中的一个文件lambda.zip。该文件夹包含几个文件.so.a我在 AWS Linux 上组装、、、等时构建了numpy这些scipy文件Pillow

据我所知,这是对numpy. 我不明白的部分是:我使用的函数numpy(并且libptf77blas.a.gz在添加grequests.

所以我假设一些关于编译的东西gevent破坏了我的其他binary依赖库的依赖关系,或者gevent它本身需要libptf77blas.a.gz并且对它发现的东西感到困惑。

ldd.so文件上运行了gevent依赖,但没有引用libptf77blas.a.gz. 但是,我是一个编译新手,所以这几乎没有定论。

我想实现并行上传Grequests,但不清楚如何解决这个问题,或者使用哪些替代库(我通常写 JS,所以 Python 是第二语言)。

0 投票
1 回答
4091 浏览

python - grequests 库中的 imap 与 map

据我所知,和之间的区别在于map等待imap所有map请求完成,然后返回有序数据。而imap立即返回数据并减少订购量。

当我使用:

所有请求完成后立即使用钩子,并调用回调函数。

当我使用:

然后不会发送一个请求。

根据文档 map 和 imap 具有完全相同的 API。

这是预期的行为吗?我不应该在 imap 中使用钩子吗?我正在使用 Python 3.5。

0 投票
1 回答
1026 浏览

python - Python 请求问题

我正在尝试使用 Python 的 grequests 库同时调用多个 URL。问题是我不太了解 grequests 的逻辑。以下是我的代码的示例(编辑版本):-

respArray返回从 URL 返回的每个单独的数组。当我运行该数组时,就好像每个数组都在自己的循环中运行,而不是同时运行。我不知道如何让它同时运行,以便获得更快的结果。

0 投票
2 回答
910 浏览

python - 防止在python异步http请求中下载响应正文

我想“ping”一个服务器,检查标头响应以查看链接是否损坏,如果没有损坏,则实际下载响应正文。

传统上,使用模块的同步方法requests,您可以发送get带有参数的请求stream = True,并在响应正文下载之前捕获标头,在出现错误(例如未找到)的情况下决定中止连接。

我的问题是,使用异步库执行此操作,grequests或者requests-futures对于我减少的知识库来说已成为不可能。

我已经尝试将流参数设置为 truerequest-futures但没有用,它仍然会下载响应正文,而不会让我在获得响应标头后立即进行干预。即使是这样,我也不确定如何进行。

这是我尝试过的:

测试.py

调试后,我发现它以任何一种方式下载响应正文。

我将不胜感激最初问题的任何解决方案,无论它是否符合我的逻辑。