【问题标题】:Get the speed of downloading a file using python [duplicate]获取使用python下载文件的速度[重复]
【发布时间】:2017-02-28 19:05:11
【问题描述】:

我正在使用 requests lib 下载文件,我得到了很多信息。关于响应,例如:大小、类型和日期。但我需要获得下载速度并为其设置最大值和最小值。我怎样才能获得下载速度?

代码如下:

import requests
import sys


link = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"
file_name = "downloaded.png"
response = requests.get(link, stream=True)
with open(file_name, "wb") as f:
        print "Downloading %s" % file_name
        response = requests.get(link, stream=True)
        total_length = int(response.headers.get('content-length'))
        print response.headers["content-type"]
        print total_length / 1024, "Kb"
        print int(response.headers["Age"]) * (10 ** -6), "Sec"
        print response.headers["date"]

        if total_length is None: # no content length header
            f.write(response.content)
        else:
            dl = 0
            for data in response.iter_content(chunk_size=4096):
                dl += len(data)
                f.write(data)
                done = int(50 * dl / total_length)
                sys.stdout.write("\r[%s%s]" % ('=' * done, ' ' * (50-done)) )
                sys.stdout.flush()

这是输出:

Downloading downloaded.png
image/png
213 Kb
0.054918 Sec
Wed, 19 Oct 2016 08:43:47 GMT
[==================================================]

【问题讨论】:

  • 伙计,我想获得以 kb 为单位的下载速度,我不需要进度条。
  • 链接的问题包含您需要的所有信息,即使它还包含您不需要的信息。

标签: python network-programming urllib


【解决方案1】:

我刚刚添加了import timestart 变量,并将sys.stdout.write 行替换为来自:How to measure download speed and progress using requests? 的行

import requests
import sys
import time


link = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png"
file_name = "downloaded.png"
start = time.clock()
response = requests.get(link, stream=True)
with open(file_name, "wb") as f:
    print "Downloading %s" % file_name
    response = requests.get(link, stream=True)
    total_length = int(response.headers.get('content-length'))
    print response.headers["content-type"]
    print total_length / 1024, "Kb"
    print int(response.headers["Age"]) * (10 ** -6), "Sec"
    print response.headers["date"]

    if total_length is None: # no content length header
        f.write(response.content)
    else:
        dl = 0
        for data in response.iter_content(chunk_size=4096):
            dl += len(data)
            f.write(data)
            done = int(50 * dl / total_length)
            sys.stdout.write("\r[%s%s] %s bps" % ('=' * done, ' ' * (50-done), dl//(time.clock() - start)))
            sys.stdout.flush()

【讨论】:

  • 兄弟,你能解释一下这条线的速度是如何计算的吗
  • dl//(time.clock() - 开始)
  • 当然,time.clock() 以秒为单位返回处理器时间,我们在启动时获取它并将其存储在变量start 中。然后在进度条的迭代过程中,我们再次获得 time.clock() 以便我们可以计算增量(当前时钟 - 开始时的时钟)。 delta是开始下载到当前时间之间的秒数,我们可以将接收到的总字节数(变量dl)除以delta来粗略计算每秒接收到的字节数
  • 谢谢,伙计
猜你喜欢
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2023-03-07
相关资源
最近更新 更多