【问题标题】:How to limit download rate of HTTP requests in requests python library?如何限制请求 python 库中 HTTP 请求的下载速率?
【发布时间】:2013-07-15 12:01:26
【问题描述】:

是否可以使用requests Python 库限制 GET 请求的下载速率?例如,使用这样的命令:

r = requests.get('https://stackoverflow.com/')

...可以限制下载速度吗?我希望有类似wget 命令的东西:

wget --limit-rate=20k https://stackoverflow.com/

我知道是possibleurllib2。我专门询问requests 库。

【问题讨论】:

    标签: python http httprequest wget python-requests


    【解决方案1】:

    有几种限制速率的方法;其中之一是token bucket,您可以找到a recipe hereanother 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。

    【讨论】:

      猜你喜欢
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      相关资源
      最近更新 更多