如何限制请求 python 库中 HTTP 请求的下载速率?
Posted
技术标签:
【中文标题】如何限制请求 python 库中 HTTP 请求的下载速率?【英文标题】:How to limit download rate of HTTP requests in requests python library? 【发布时间】:2013-07-15 12:01:26 【问题描述】:是否可以使用requests
Python 库限制 GET 请求的下载速率?例如,使用这样的命令:
r = requests.get('https://***.com/')
...可以限制下载速度吗?我希望有类似wget
命令的东西:
wget --limit-rate=20k https://***.com/
我知道是possible 和urllib2
。我专门询问requests
库。
【问题讨论】:
【参考方案1】:有几种限制速率的方法;其中之一是token bucket,您可以找到a recipe here 和another one here。
通常您希望对socket.send()
和socket.recv()
进行节流或速率限制。你可以试试socket-throttle
,看看它是否能满足你的需要。
不要与x-ratelimit
rate limiting response headers 混淆,后者与请求数量有关,而不是与下载/传输速率有关。
【讨论】:
自从 OP 询问有关使用requests
库执行此操作时,这并不能真正回答问题......除了您建议他重新编写 requests
的深层部分来做他想要什么。
@DanH,非常欢迎您提供更好的答案,在撰写本文时答案是“不,除非您弄乱内部结构”,这对 OP 没有帮助。跨度>
【参考方案2】:
没有内置支持,但是可以使用stream api。
>>> import requests
>>> import time
>>> req = requests.request('GET', 'https://httpbin.org/get', stream=True)
>>> for data in req.iter_content(chunk_size=1024):
... time.sleep(0.001)
...
在advanced usage 中写道,它允许您一次检索更少量的响应。
在我的网络中,上面的示例(导致几个 GB 的大文件)没有睡眠的带宽为 17.4 MB/s,睡眠为 1 ms 的带宽为 2.5 MB/s。
【讨论】:
以上是关于如何限制请求 python 库中 HTTP 请求的下载速率?的主要内容,如果未能解决你的问题,请参考以下文章