【问题标题】:Python - urllib and urllib2 - What happens if you don't read?Python - urllib 和 urllib2 - 如果你不阅读会发生什么?
【发布时间】:2017-01-15 11:52:19
【问题描述】:

我想用 urllib/urllib2 实现下载速度限制。基本思想是查看过去 x 秒内下载了多少,如果超过限制,脚本就会休眠一段时间。

现在的问题是,如果您有一个打开的连接(使用urlopen()),但暂时不调用read() 函数会发生什么?

  1. urllib 是否有一个内置的缓冲区,它会一直下载到缓冲区满,并且每次调用read() 时,缓冲区会减少 n 个字节并继续下载(显然,如果已满,urllib 会等待)?
  2. 如果有urllib缓冲区,有多大,可以手动设置大小吗?
  3. 如果没有缓冲区,urllib 会继续下载吗?
  4. urllib 和 urllib2 read() 函数有区别还是一样?

【问题讨论】:

    标签: python download urllib2 urllib


    【解决方案1】:

    我全心全意地推荐使用优秀的 requests 库而不是 urllib 或 urllib2。

    请参阅herehere,了解其他人如何实施传输速率限制。

    【讨论】:

    • 谢谢,我查看了您发送的请求和链接。但是即使有请求,问题仍然是如果 request.iter_content(1024) 有一段时间没有被调用会发生什么,请求是继续下载还是暂停?
    • 我认为当你使用requests'流时,下载会暂停,直到你请求下一个块。我这么认为的原因是因为我曾经使用这个技巧来限制大量下载使用的内存量。当您在对requests.get 的调用中设置stream=True 时,您的连接将不会返回到池中,直到所有数据都被消耗完,或者您自己关闭它。看看这guide 是否有帮助。不要忘记if chunk is not None: #do stuff - None 的块只是保持活动状态。
    • 感谢您的更新。我将进行网络分析以查看我的脚本消耗了多少数据,以确保请求实际暂停。
    • 酷,让我知道你的发现!
    猜你喜欢
    • 1970-01-01
    • 2019-01-09
    • 2016-03-11
    • 2021-01-16
    • 2020-07-09
    • 2017-02-12
    • 2011-09-17
    • 1970-01-01
    相关资源
    最近更新 更多